Я использую сервер 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