summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG.txt2
-rw-r--r--includes/bootstrap.inc36
2 files changed, 37 insertions, 1 deletions
diff --git a/CHANGELOG.txt b/CHANGELOG.txt
index 079660e8d..c4243c04c 100644
--- a/CHANGELOG.txt
+++ b/CHANGELOG.txt
@@ -62,6 +62,8 @@ Drupal 7.0, xxxx-xx-xx (development version)
uploading a site logo--that don't require the overhead of databases and
hooks, the current unmanaged copy, move and delete operations have been
preserved but renamed to file_unmanaged_*().
+- Added aliased multi-site support:
+ * Added support for mapping domain names to sites directories.
Drupal 6.0, 2008-02-13
----------------------
diff --git a/includes/bootstrap.inc b/includes/bootstrap.inc
index 56a4b9b71..fc60b951b 100644
--- a/includes/bootstrap.inc
+++ b/includes/bootstrap.inc
@@ -292,6 +292,30 @@ function timer_stop($name) {
*
* 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,
@@ -311,12 +335,22 @@ function conf_path($require_settings = TRUE, $reset = FALSE) {
}
$confdir = 'sites';
+
+ $sites = array();
+ if (file_exists(DRUPAL_ROOT . '/' . $confdir . '/sites.php')) {
+ // This will overwrite $sites with the desired mappings.
+ include(DRUPAL_ROOT . '/' . $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(DRUPAL_ROOT . '/' . $confdir . '/' . $sites[$dir])) {
+ $dir = $sites[$dir];
+ }
+ if (file_exists(DRUPAL_ROOT . '/' . $confdir . '/' . $dir . '/settings.php') || (!$require_settings && file_exists(DRUPAL_ROOT . '/' . $confdir . '/' . $dir))) {
$conf = "$confdir/$dir";
return $conf;
}