AllowOverride All и None


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.


Пример на скриншоте:

AllowOverride


Возможность размещать файлы в иерархии каталогов может быть очень полезной. Файлы .htaccess всегда используются на серверах с большим количеством сайтов. Разместив файл в домашнем каталоге пользователя можно задать любые общие для всех его сайтов правила.

В файлы для сайтов можно добавить индивидуальные настройки. Например, задать для каждого каталога свою кодировку, в которой веб-сервер будет отдавать ответ клиенту.

В .htaccess часто задаются редиректы



Если с сервера работает одно приложение — один сайт, AllowOverride  лучше выставлять в None и задавать все настройки в конфигурационном файле.

В этом случае процесс разворачивания сайта на сервере будет немного более трудозатратным, но скорость работы и производительность будет выше. Особенно это заметно при высоких нагрузках.



Читайте про другие приемы оптимизации Apache и про AllowOverride в документации

Сказать спасибо