使用InheritDownBefore看起来与RewriteOptions

时间:2017-03-14 17:25:46

标签: apache .htaccess mod-rewrite

我有一个像/ 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 

那么,如果这两种配置相同,那么使用这两种配置会有什么不同?

1 个答案:

答案 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