Index: CHANGELOG.txt
===================================================================
RCS file: /cvs/drupal/drupal/CHANGELOG.txt,v
retrieving revision 1.253.2.35
diff -u -p -r1.253.2.35 CHANGELOG.txt
--- CHANGELOG.txt       16 Dec 2009 20:47:10 -0000      1.253.2.35
+++ CHANGELOG.txt       25 Jan 2010 10:58:45 -0000
@@ -1,5 +1,10 @@
 // $Id: CHANGELOG.txt,v 1.253.2.35 2009/12/16 20:47:10 goba Exp $

+Drupal 6.x-dev, xxxx-xx-xx (development release)
+----------------------
+- Added aliased multi-site support:
+    * Added support for mapping domain names to sites directories.

 
Index: includes/bootstrap.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/bootstrap.inc,v
retrieving revision 1.206.2.11
diff -u -9 -p -r1.206.2.11 bootstrap.inc
--- includes/bootstrap.inc	25 Feb 2009 13:49:54 -0000	1.206.2.11
+++ includes/bootstrap.inc	30 Mar 2009 19:07:50 -0000
@@ -222,18 +222,42 @@ function timer_stop($name) {
  *  8. $confdir/org.mysite
  *
  *  9. $confdir/8080.www.drupal.org
  * 10. $confdir/www.drupal.org
  * 11. $confdir/drupal.org
  * 12. $confdir/org
  *
  * 13. $confdir/default
  *
+ * If a file named sites.php is present in the $confdir, it will be loaded
+ * prior to scanning for directories.  It should define an associative array
+ * named $sites, which maps domains to directories.  It should be in the form
+ * of:
+ *
+ * $sites = array(
+ *   'The url to alias' => 'A directory within the sites directory'
+ * );
+ *
+ * For example:
+ *
+ * $sites = array(
+ *   'devexample.com' => 'example.com',
+ *   'localhost/example' => 'example.com',
+ * );
+ *
+ * The above array will cause Drupal to look for a directory named
+ * "example.com" in the sites directory whenever a request comes from
+ * "example.com", "devexample.com", or "localhost/example". That is useful
+ * on development servers, where the domain name may not be the same as the
+ * domain of the live server.  Since Drupal stores file paths into the database
+ * (files, system table, etc.) this will ensure the paths are correct while
+ * accessed on development servers.
+ *
  * @param $require_settings
  *   Only configuration directories with an existing settings.php file
  *   will be recognized. Defaults to TRUE. During initial installation,
  *   this is set to FALSE so that Drupal can detect a matching directory,
  *   then create a new settings.php file in it.
  * @param reset
  *   Force a full search for matching directories even if one had been
  *   found previously.
  * @return
@@ -241,24 +265,34 @@ function timer_stop($name) {
  */
 function conf_path($require_settings = TRUE, $reset = FALSE) {
   static $conf = '';
 
   if ($conf && !$reset) {
     return $conf;
   }
 
   $confdir = 'sites';
+
+  $sites = array();
+  if (file_exists($confdir . '/sites.php')) {
+    // This will overwrite $sites with the desired mappings.
+    include($confdir . '/sites.php');
+  }
+
   $uri = explode('/', $_SERVER['SCRIPT_NAME'] ? $_SERVER['SCRIPT_NAME'] : $_SERVER['SCRIPT_FILENAME']);
   $server = explode('.', implode('.', array_reverse(explode(':', rtrim($_SERVER['HTTP_HOST'], '.')))));
   for ($i = count($uri) - 1; $i > 0; $i--) {
     for ($j = count($server); $j > 0; $j--) {
       $dir = implode('.', array_slice($server, -$j)) . implode('.', array_slice($uri, 0, $i));
-      if (file_exists("$confdir/$dir/settings.php") || (!$require_settings && file_exists("$confdir/$dir"))) {
+      if (isset($sites[$dir]) && file_exists($confdir . '/' . $sites[$dir])) {
+        $dir = $sites[$dir];
+      }
+      if (file_exists($confdir . '/' . $dir . '/settings.php') || (!$require_settings && file_exists($confdir . '/' . $dir))) {
         $conf = "$confdir/$dir";
         return $conf;
       }
     }
   }
   $conf = "$confdir/default";
   return $conf;
 }
 
Index: sites/example.sites.php
===================================================================
RCS file: sites/example.sites.php
diff -N sites/example.sites.php
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ sites/example.sites.php	30 Mar 2009 19:07:50 -0000
@@ -0,0 +1,46 @@
+<?php
+// $Id$
+
+/**
+ * @file
+ * Configuration file for Drupal's multi-site directory aliasing feature.
+ *
+ * Drupal searches for an appropriate configuration directory based on the
+ * website's hostname and pathname. A detailed description of the rules for
+ * discovering the configuration directory can be found in the comment
+ * documentation in 'sites/default/default.settings.php'.
+ *
+ * This file allows you to define a set of aliases that map hostnames and
+ * pathnames to configuration directories. These aliases are loaded prior to
+ * scanning for directories, and they are exempt from the normal discovery
+ * rules. The aliases are defined in an associative array named $sites, which
+ * should look similar to the following:
+ *
+ * $sites = array(
+ *   'devexample.com' => 'example.com',
+ *   'localhost/example' => 'example.com',
+ * );
+ *
+ * The above array will cause Drupal to look for a directory named
+ * "example.com" in the sites directory whenever a request comes from
+ * "example.com", "devexample.com", or "localhost/example". That is useful
+ * on development servers, where the domain name may not be the same as the
+ * domain of the live server. Since Drupal stores file paths into the database
+ * (files, system table, etc.) this will ensure the paths are correct while
+ * accessed on development servers.
+ *
+ * To use this file, copy and rename it such that its path plus filename is
+ * 'sites/sites.php'. If you don't need to use multi-site directory aliasing,
+ * then you can safely ignore this file, and Drupal will ignore it too.
+ */
+
+/**
+ * Multi-site directory aliasing:
+ *
+ * Edit the lines below to define directory aliases. Remove the leading hash
+ * signs to enable.
+ */
+#$sites = array(
+#  'devexample.com' => 'example.com',
+#  'localhost/example' => 'example.com',
+#);
