Если у вас есть RewriteEngine On
в /folder/.htaccess
, то директивы mod_rewrite в родительской конфигурации будут полностью переопределены, так как директивы mod_rewrite по умолчанию не наследуются.
Однако, даже если вы включите mod_rewrite наследование, директивы по-прежнему не будут работать, потому что mod_rewrite наследование"фактически копирует" директивы "на месте", как если бы директивы находились в одном файле конфигурации - в той же области видимости (с той же directory-prefix ).
Итак, с RewriteOptions Inherit
в файле /folder/.htaccess
, директивы эффективно обрабатываются так:
# /folder/.htaccess
RewriteRule "^sub/(.*)" "index.php?sub=$1"
# Inherited from parent config
RewriteRule "^([^/]+)/root/(.*)" "$1/index.php?root=$2"
Pattern "^([^/]+)/root/(.*)"
просто не будет совпадать, если используется в области действия /folder/.htaccess
файла - что происходит при использовании наследования mod_rewrite.
ЕСЛИ директивы /.htaccess
(root) всегда наследуется, тогда вы можете изменить директиву root, чтобы прочитать что-то вроде следующего (удаление родительского каталога из правила):
RewriteRule ^root/(.*) index.php?root=$1 [L]
(Да, это соответствует прямой я уже в файле /folder/.htaccess
.)
Однако, «проблема» в том, что директива, вероятно, не будет работать, если не унаследовано, как в вашем примере. ЕСЛИ он вам особенно нужен для работы в обоих сценариях ios: при наследовании из файла подкаталога .htaccess
и непосредственно из документа - root, затем измените директиву, чтобы сделать родительскую папку необязательной. Например:
RewriteRule ^([^/]+/)?root/(.*) $1index.php?root=$3 [L]
Возможно, вам все равно придется исправить директиву RewriteBase
или полностью удалить ее.
Наследование mod_rewrite не так полезно , как в сначала появляется. Директивы, которые, как ожидается, будут унаследованы, обычно должны быть специально написаны, чтобы учесть это.