In this article, I'll explain how I converted my site from using sites/default/files to a specific sites folder, IE: sites/ericlondon.com/files. This is essential for setting up a Drupal mulit-site installation, which allows you to host numerous Drupal sites off a single Drupal installation. When creating a new site/project, I think it's important to ask yourself: will this client/project ever require another Drupal site? In my recent history, I have found it's safer to implement a site-specifc sites folder for each project from the start, to keep the configuration segmented. Here is an example filesystem layout:
Contrib modules that are shared across all client/project sites:
Custom modules that are shared across all client/project sites:
Site-specific files directories:
Custom modules that are site specific:
For my site, I used the Site Directory Migrate
module. I downloaded the module and unpacked to: sites/all/modules/contrib/sitedir_migrate. This module comes with a bunch of submodules to help the migration (profile fields, CCK, blocks, etc). I chose to enable all of them for my site.
After installing the module, I browsed to the configuration page (admin/settings/sitedir_migrate), entered "default" in the "From:" field, and entered "ericlondon.com" in the "To" field. By saving this page, the module searches your database for instances of your previous sites directory and replaces the data with the new sites folder.
I then browsed to the File System admin page (admin/settings/file-system), and changed my file system path from "sites/default/files" to "sites/ericlondon.com/files", and saved. You can now disable the Site Directory Migrate modules.
At this point, your content will be adjusted, but you still need to reconfigure your Drupal installation. On the command line, I moved the contents of my previous sites folder to the new one.
$ cd /path/to/drupal/installation/httpdocs/sites
$ mkdir ericlondon.com
$ mv default/settings.php ericlondon.com/
$ mv default/files ericlondon.com/
Now that everything has been reconfigured, I flushed all my caches, and started to verify my content. I immediately noticed my content's teasers had not been adjusted, IE: teaser images were still pointing to: sites/default/files.
I decided to use SQL to blindly update all of my teasers (probably not the best solution, but it worked for me).
set teaser = replace(teaser, 'sites/default/files', 'sites/ericlondon.com/files')
where teaser like '%sites/default/files%'
NOTE: If you have phpMyAdmin
installed for your site, it has a great feature that allows you to search through all of your tables for a specific string. This can be used to help find additional records that need to be adjusted.