AllowOverride — директива, за счет которой в конфигурации Apache задается использовать файлы .htaccess или нет.
.htaccess в свою очередь позволяет задавать определенные настройки для каждого каталога и подкаталога сайта, переопределяя настройки виртуального хоста.
AllowOverride и файлы .htaccess
Директива имеет одно из двух значений:
- All — обрабатывать файлы .htaccess в каталоге, для которого задано значение
- None — игнорировать их
Значение по умолчанию в современных версиях Apache (2.3.9 и выше) — None
Значение задается в конфигурационных файлах Apache в блоке Directory.
Конфигурационный файл виртуального хоста Apache в общем виде выглядит следующим образом:
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
ServerAdmin [email protected]
DocumentRoot /var/www/example.com/
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
<Directory />
Options -ExecCGI -Indexes -Includes +FollowSymLinks
AllowOverride All
</Directory>
SetEnvIf X-Forwarded-Proto https HTTPS=on
</VirtualHost>
В нем указаны имя сайта, порт, обращаясь на который можно получить ответ и каталог из которого отдается контент. Также указываются параметры логирования и настройки для директорий.
Директория в данном случае определена только одна <Directory />, это корень сайта, подобных блоков с разными путями может быть больше.
Для каждой директории можно задать ряд опций (среди них AllowOverride)
Опции приведены со значениями из примера выше.
-ExecCGI — не выполнять CGI скрипты
-Indexes — не выводить содержимое каталога при отсутствии index.php или index.html
-Includes — не разрешать Server-Side Includes, которая представляет собой файлы .shtml, собираемые из других html файлов и cgi-скриптов
+FollowSymLinks — как следует из названия директивы, Apache сможет переходить по символьным ссылкам
AllowOverride All — указывает, что для корневого каталога виртуального хоста и всех вложенных нужно использовать .htaccess
.htaccess может быть своим в любом каталоге, что означает возможность задания правил для каждого сайта и для отдельных разделов сайтов. Таких как example.com/sub, example.com/2 и т.п.
В случае с иерархической структурой каталогов могут отрабатывать файлы .htaccess на каждом уровне. На сервере может существовать путь /var/www/site/example.com/sub/new. Если для каждого из каталогов будет блок конфигурации в настройках — в каждом можно разместить .htaccess
Блоки Directory могут определяться не только в файлах виртуальных хостов, они по умолчанию есть в /etc/apache2/apache2.conf.
Пример на скриншоте:
Возможность размещать файлы в иерархии каталогов может быть очень полезной. Файлы .htaccess всегда используются на серверах с большим количеством сайтов. Разместив файл в домашнем каталоге пользователя можно задать любые общие для всех его сайтов правила.
В файлы для сайтов можно добавить индивидуальные настройки. Например, задать для каждого каталога свою кодировку, в которой веб-сервер будет отдавать ответ клиенту.
В .htaccess часто задаются редиректы
Если с сервера работает одно приложение — один сайт, AllowOverride лучше выставлять в None и задавать все настройки в конфигурационном файле.
В этом случае процесс разворачивания сайта на сервере будет немного более трудозатратным, но скорость работы и производительность будет выше. Особенно это заметно при высоких нагрузках.
Читайте про другие приемы оптимизации Apache и про AllowOverride в документации