<rmcreative>

RSS

Drupal: Мультисайтинг на локальном сервере

31 октября 2008

Недавно возникла необходимость поотлаживать мультисайт в Drupal на локальном сервере. Перекрывать hosts не хотелось т.к. раздеплоенный вариант также необходимо было просматривать.

Мультисайтинг в Drupal — довольно удобная штука. После рассмотрения механизма работы был сделан вывод, что определяется, какой из сайтов отображать по заголовку host.

Для подмены такого заголовка из .htaccess или конфига апача можно воспользоваться mod_headers:

RequestHeader set host example.com

Для того, чтобы получить полностью работоспособный мультисайт Drupal, пришлось немного поправить bootstrap.inc:

function conf_init(){
 
  //...
 
  else {
    // Create base URL
    $base_root = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') ? 'https' : 'http';
 
    // As $_SERVER['HTTP_HOST'] is user input, ensure it only contains
    // characters allowed in hostnames.
    $base_url = $base_root .= '://'. preg_replace('/[^a-z0-9-:._]/i', '', $_SERVER['HTTP_HOST']);
 
    // $_SERVER['SCRIPT_NAME'] can, in contrast to $_SERVER['PHP_SELF'], not
    // be modified by a visitor.
    if ($dir = trim(dirname($_SERVER['SCRIPT_NAME']), '\,/')) {
      $base_path = "/$dir";
      $base_url .= $base_path;
      $base_path .= '/';
    }
    else {
      $base_path = '/';
    }
  }
 
  //Тут добавляем наш любимый localhost
  $base_url = 'http://localhost/';
 
  //...
 
  if (strpos($cookie_domain, 'www.') === 0) {
    $cookie_domain = substr($cookie_domain, 4);
  }
  $cookie_domain = explode(':', $cookie_domain);
  $cookie_domain = '.'. $cookie_domain[0];
 
  //Тут тоже добавляем наш любимый localhost
  $cookie_domain = '.localhost';
 
  //...

Правки нужны для того, чтобы пути считались относительно localhost и куки, соответственно, тоже выставлялись для него.

Комментарии RSS

  1. №819
    podarok
    podarok 03.11.2008, 13:21:21

    такие вещи на drupal.org выложить бы

  2. №818
    Sam
    Sam 03.11.2008, 14:26:41

    Спасибо за напоминание. Добавил в блог на Drupal.ru.

  3. №5363
    lesha
    lesha 20.09.2011, 22:40:55

    Перекрывать hosts не хотелось

    А чем денвер не устраивает? там хостс автоматом переписывается

  1. Почта опубликована не будет.

  2. Можно использовать синтаксис Markdown или HTML.

  3. Введите ответ в поле. Щёлкните, чтобы получить другую задачу.