Назад | Перейти на главную страницу

.htaccess игнорируется, даже если VirtualHost имеет «AllowOverride All»

Я использую сервер LAMP в Fedora 13, который работает нормально; однако я только что добавил файл ".htaccess" в корневую папку моего текущего сайта, который полностью игнорируется.

Я перепробовал полдюжины разных тестов, в том числе этот:

RewriteEngine on
RewriteBase /

RewriteRule ^.*$ index.php

Но изображения и все другие страницы загружаются нормально, а несуществующие файлы по-прежнему 404. Я также пробовал это:

order deny,allow
deny from all

Но каждая страница по-прежнему загружается нормально. И снова файл .htaccess просто игнорируется на 100%.

Мы помещаем наши записи виртуального хоста в /etc/httpd/conf.d/virtual.conf. Выглядит это так:

NameVirtualHost *

<VirtualHost *>
    ServerName              intranet
    DocumentRoot            /var/www/default
    <Directory "/var/www/default">
        Options FollowSymLinks
        AllowOverride All

        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

<VirtualHost *>
    ServerName              ourwebsite.com
    DocumentRoot            /var/www/html/ourwebsite.com/docroot
    <Directory "/var/www/html/ourwebsite.com/docroot">
        Options FollowSymLinks
        AllowOverride All

        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

Что еще может заставить наш сервер полностью ИГНОРИРОВАТЬ .htaccess файл??

Редактировать:

Я изменил файл .htaccess на указанный выше, чтобы лучше продемонстрировать, что мои изменения игнорируются. Обратите внимание, что я пробовал тот же файл .htaccess на производственном сервере, и он работал нормально.

Изменить 2:

Хорошо, у меня новая информация! В целях тестирования я временно изменил КАЖДУЮ директиву AllowOverride на AllowOverride All. Я понял, что самая первая запись в Справочнике, кажется, подавляет все остальные:

<Directory />
    Options FollowSymLinks
    AllowOverride None
</Directory>

Когда я изменил это на AllowOverride All, мои файлы .htaccess вступят в силу. Это как и все остальные AllowOverride All директивы в моих файлах конфигурации игнорируются!

Что дает??

Невероятно. Помните, как я сказал, что это сервер разработки? Да ... вот как ДЕЙСТВИТЕЛЬНО выглядит запись моего виртуального хоста:

<VirtualHost *>
    ServerName              dev.ourwebsite.com
    DocumentRoot            /var/www/html/dev.ourwebsite.com/docroot
    <Directory "/var/www/html/ourwebsite.com/docroot">
        Options FollowSymLinks
        AllowOverride All

        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

Вы видите это? Что ж, я этого не сделал. Я ЗАБЫЛ изменить свою запись в "Каталоге" на dev.ourwebsite.com вместо ourwebsite.com - и это имело все значение. Я просто предположил, что Apache выдал бы ошибку, если бы каталог не существовал; но это относится только к директиве DocumentRoot. основан на совпадении - это означает, что он применяет правила, если он соответствует входящему запросу, но в противном случае его не волнует, сообщаете ли вы его AllowOverride на волшебных единорогах.

Пусть это станет уроком для всех, кто придет искать - когда все остальное терпит неудачу, подумайте о всемогущей опечатке.

Проверьте, есть ли какие-либо другие «AllowOverride None» в httpd.conf над объявлением virtualhosts. Возможно, у вас в docroot стоит "AllowOverride None".

Три догадки:

Есть ли на самом деле пробел после запятой в строке order deny, allow в .htaccess? Апачу это не нравится. Для меня на F13 я получил 500.

У тебя есть AccessFileName директива где угодно?

Если вы используете selinux, у вас есть правильный контекст для файла (ls -lZ)?

У меня это было на новом сервере, и в конце концов я понял, что мод-перезапись не включена по умолчанию.

ln -s /etc/apache2/mods-available/rewrite.load /etc/apache2/mods-enabled/rewrite.load