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 по email OK
такие вещи на drupal.org выложить бы
Спасибо за напоминание. Добавил в блог на Drupal.ru.
А чем денвер не устраивает? там хостс автоматом переписывается