Debian, Dojo, Django, Python

Делюсь опытом в описанных технологиях. Блог в первую очередь выполняет роль памяток для меня самого.

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, но это уже совсем другая история.

Комментариев нет :

Отправить комментарий