Apache не читает .htaccess
Столкнулся с тем, что Apache читает файл .htaccess
, который я создал для своего сайта, но совершенно его не воспринимает. Длительное чтение статей выявило, что недостаточно полно был настроен файл конфигурации Apache httpd.conf
. В этой статье я расскажу, что было сделано не так, и что нужно сделать. Все операции требуют привилегий root.
Содержимое файла .htaccess
:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php [L]
Эти директивы должны были бы перенаправлять все запросы к сайту с любой страницы на index.php
, однако на самом деле этого не происходило и я получал сообщение Error 404: Page not found
. Отходить от шаблона проектирования Front Controller я не собирался, поэтому начал читать.
В большинстве статей написано, что нужно раскомментировать следующие строки в httpd.conf
:
LoadModule rewrite_module modules/mod_rewrite.so
В CentOS 6 эта строка раскомментирована по умолчанию, и нужная библиотека также присутствует в каталоге файлов Apache. В Deb-дистрибутивах этот мод по умолчанию выключен, включается командой:
a2enmod rewrite
Дальше нужно проверить, что в httpd.conf
раскомментированы следующие строки:
AccessFileName .htaccess
#Какой-то текст, куча комментариев...
<Files ~ "^\.ht">
Order allow,deny
Deny from all
Satisfy All
</Files>
Однако и этого недостаточно. По-умолчанию в качестве DocumentRoot
для Apache указана папка /var/www/html
. Соответствующие правила ее обработки описаны в httpd.conf
следующими строками (комментарии удалены):
<Directory "/var/www/html">
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
Allow from all
</Directory>
Я выкладываю сайты на свой сервер в папку /var/www
, т. е. по факту у меня DocumentRoot'ом будет выступать именно она, а не /var/www/html
. Это дело привычки, просто потом при заполнении файлов конфигурации виртуальных хостов писать текста немного меньше.
Добавим в httpd.conf
следующее:
<Directory "/var/www">
Options Indexes +FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
Allow from all
</Directory>
Не забудьте перезапустить Apache:
Debian
service apache2 restart
CentOS
service httpd restart
Теперь при вводе в адресной строке URI типа http://site.lo/Login/Auth
сервер будет перенаправлять запрос на index.php
, а тот, в свою очередь, будет вызывать метод Auth контроллера Login, но это уже совсем другая история.
Комментариев нет :
Отправить комментарий