Статей по настройке vhost_alias много, но почти никто не упоминает о проблемах.
Я пока нашёл две. Первая — это некорректно начинает работать $_SERVER[DOCUMENT_ROOT] и вторая тоже самое с .htaccess.
Начну с .htaccess. При обычных настройках apache при записи в .htaccess:
1 2 |
RewriteEngine On RewriteRule ^img/(.*)$ images/$1 [L,QSA] |
строка
http://domen.ru/img/picture.jpg
заменится на
http://domen.ru/images/picture.jpg.
При включении vhost_alias произойдёт следующее чудо:
http://domen.ru/domen.ru/images/picture.jpg
и естественно ничего работать не будет.
Решается это легко, добавление записи в .htaccess:
1 |
RewriteBase / |
С $_SERVER[DOCUMENT_ROOT] чуть сложнее, но решаемо.
При включении vhost_alias на всех сайтах $_SERVER[DOCUMENT_ROOT] начинает отдавать /var/www, ни или какой корень настроен.
Вариантов решения два. Правильный это использовать dirname(__FILE__) вместо $_SERVER[DOCUMENT_ROOT].
Второй, если уже всё написано и лень исправлять, то рядом с настройкой vhost_alias допишем:
1 2 |
VirtualDocumentRoot "/var/www/%0" php_admin_value auto_prepend_file /var/www/fix_docroot.php |
В корне создадим файл fix_docroot.php с таким содержанием:
1 2 3 4 |
<?php $_SERVER["OLD_DOCUMENT_ROOT"] = $_SERVER["DOCUMENT_ROOT"]; $_SERVER["DOCUMENT_ROOT"] = str_replace($_SERVER["SCRIPT_NAME"], '',$_SERVER["SCRIPT_FILENAME"]); ?> |
Строчка $_SERVER[«OLD_DOCUMENT_ROOT»] нужна только для сохранения старого $_SERVER[«DOCUMENT_ROOT»], мало ли понадобится.
Ну и всё, рестартим apache и провераем.
Добавить комментарий