Может ли кто-нибудь объяснить мне, в каком порядке apache выполняет файлы .htaccess, находящиеся на разных уровнях одного и того же пути, и как приоритезируются правила перезаписи в них?
Например, почему правило перезаписи в первом .htaccess ниже не работает и является /blog
приоритетным?
.htaccess в /
RewriteEngine on
RewriteBase /
RewriteRule ^blog offline.html [L]
.htaccess в /blog
RewriteEngine On
RewriteBase /blog/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /blog/index.php [L]
PS: я не просто ищу ответ, но для того, чтобы понять внутренности apache / mod_rewrite ... почему для меня важнее, чем как это исправить,
источник
Вы можете использовать
RewriteOptions inherit
для наследования правил перезаписи родительского каталога. Тем не менее, правила перезаписи родительского каталога будут применены позже, согласно документации на RewriteOptions .источник
mod_rewrite
директивы не наследуются по умолчанию (в отличие от других модулей). Вам понадобитсяRewriteOptions InheritXXXX
директива где-то, чтобы директивы были унаследованы. Однако это становится более сложным в Apache 2.4+ сInheritDown
опцией, которую можно указать в родительских каталогах и в конфигурации сервера, которая затем контролирует дочерние каталоги.