我有一个像/ aaa / bbb / ccc / ddd这样的目录树,在每个目录中都有一个.htaccess文件。
就在今天,我发现,默认情况下,如果我使用" RewriteEngine On"只执行最后一个.htaccess文件(在/aaa/bbb/ccc/ddd/.htaccess)的规则,并且完全忽略与mod_rewrite相关的所有其他.htaccess规则。
所以用户@anubhava告诉我使用" RewriteOptions InheritBefore"它的工作完美,我的意思是,所有.htacces文件中的所有.htaccess规则现在都按照从最父到最多的顺序解释。
我的问题是:在此链接http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewriteoptions中,它表示InheritDownBefore将适用于所有" 孩子的"和InheritBefore将适用于" 孩子"
但我刚刚做了一个测试,我在下面插入了一行代码......
RewriteOptions InheritBefore
...仅在最顶层的父级中,它仍然像我使用过的那样工作:
RewriteOptions InheritDownBefore
那么,如果这两种配置相同,那么使用这两种配置会有什么不同?
答案 0 :(得分:1)
区别在于:
InheritDownBefore
用于父母的.htaccess,因此会进入/aaa/.htaccess
InheritBefore
用于儿童的.htaccess,因此会进入/aaa/bbb/ccc/ddd/.htaccess
和/aaa/bbb/ccc/.htaccess
等。
两个选项的效果相同,即
父范围中的规则应用子范围中指定的 规则。
<强>更新强>
经过进一步测试,我发现父RewriteOptions
中的任何.htaccess
导致相同的行为,即父指令在子范围内变得可用,但根据文档第1和第2选项适用于儿童。仅限htaccess。
RewriteOptions Inherit
RewriteOptions InheritBefore
RewriteOptions InheritDown
RewriteOptions InheritDownBefore