Назад | Перейти на главную страницу

Как отключить только некоторые директивы модулей Apache, которые будут использоваться в .htaccess

Я веб-хостер и владелец сайта.

Как хостер я не хочу отключать использование некоторых директив модулей в .htaccess для сайтов моих клиентов.

Поскольку некоторые сайты служат CDN, я хочу отключить, например, AddHandler (и еще несколько) из mod_mime. Так что даже если файлы php загружены, они не могут выполняться.

Хотя такие директивы, как RewriteRule из mod_rewrite, по-прежнему хорошо иметь.

Чтобы объяснить это в псевдокоде:

AllowOverride All -mod_mime -DocumentRoot -CustomLog -ErrorLog

Документ https://httpd.apache.org/docs/2.2/mod/mod_mime.html#AddHandler говорит, что контекст - это .htaccess, могу ли я ограничить контекст этой директивы модуля? Я не боюсь патчить или перекомпилировать.

Как мне это решить? Спасибо!

Ответ был буквально у меня под носом.

Однако вам понадобится Apache 2.4

https://httpd.apache.org/docs/current/mod/core.html#allowoverridelist

Устанавливать

<Directory /var/www/vhosts>
    AllowOverride None
    AllowOverrideList RewriteEngine RewriteOptions RewriteBase RewriteCond RewriteRule
    Require all granted
</Directory>

Разрешит только те директивы, которые указаны в AllowOverrideList. Все остальные вызовут внутреннюю ошибку сервера.

Однако сделать то же самое для целых модулей все еще не удается, но для меня это достаточно хорошее решение.

Еще раз спасибо SF

DocumentRoot, CustomLog и ErrorLog уже недоступны в .htaccess, так что это не проблема.

Насколько я знаю, нет возможности специально отключить mod_mime полностью. Вам придется отключить все FileInfo, что может быть не тем, что вам нужно.

<Directory /var/www/vhosts>
   AllowOverride  All -FileInfo
   RemoveHandler .php
</Directory>