борется с mod_rewrite в apache2. Проблема в том, что директивы игнорируются при вводе в httpd.conf.
Если я устанавливаю AllowOverride All
в доступных сайтах/по умолчанию и добавляю директиву в .htaccess, он работает, и каждый запрос появляется в файле mod_rewrite.log.
Но когда я удаляю .htaccess и AllowOverride All
и добавляю директиву в httpd.conf, он игнорируется.
Httpd.conf выглядит следующим образом:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteLog "/var/log/apache2/mod_rewrite.log"
RewriteLogLevel 4
RewriteRule ^/.* http://www.google.com
</IfModule>
(Просто выберите google для отладки)
Phpinfo() показывает mod_rewrite среди загруженных модулей, rewrite.load имеет символическую ссылку на /mods -enabled для доступных мод, т.е. на самом деле. Кроме того, когда я удаляю mod_rewrite.log, он создается при запуске сервера, что ИМО указывает, что HTTPd.conf читается, и mod_rewrite.c существует. Но mod_rewrite.log остается пустым, что указывает на то, что запрос не отправляется в mod_rewrite. Кроме того, при вводе бессмыслицы в сервер httpd.conf не запускается и не выдается ошибка.
Что мне не хватает? Есть ли что-то вроде AllowOverride
, я должен установить даже для основных файлов конфигурации?
Я уже играл с /
, поскольку .htaccess использует относительные пути, а httpd.conf - нет. Я также попытался установить теги <Directory>
, что для меня не имеет смысла, но все же попробовал посмотреть, не изменит ли он что-нибудь... help?!
Подумал сам, но если кто-то столкнется с одной и той же проблемой:
"Глобальные" правила перезаписи, установленные в httpd.conf, должны быть включены в каждый виртуальный хост, используя
<VitualHost *:80>
RewriteEngine on
RewriteOptions Inherit
</VirtualHost>
В противном случае они не будут работать в VHosts. Кроме того, правила родителя применяются ПОСЛЕ правил для детей.