From 6575a26c88bc8dcc739a58d389c9eec642fff233 Mon Sep 17 00:00:00 2001 From: Angie Byron <webchick@24967.no-reply.drupal.org> Date: Sun, 12 Oct 2008 02:47:50 +0000 Subject: [PATCH] #231298 by Crell and rednahead: Allow for aliased multi-site support. --- CHANGELOG.txt | 2 ++ includes/bootstrap.inc | 36 +++++++++++++++++++++++++++++++++++- 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.txt b/CHANGELOG.txt index 079660e8d44a..c4243c04c134 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 56a4b9b715cf..fc60b951bfc0 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; } -- GitLab