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, но это уже совсем другая история.
Комментариев нет :
Отправить комментарий