订单指令
规则order deny,allow并定义处理和指令的order allow,deny顺序。处理所有允许和拒绝规则,最终的相关规则将覆盖任何先前的规则。请参阅 mod_authz_host 模块文档的订单指令部分进行确认。deny fromallow from
请注意,所有 Allow 和 Deny 指令都会被处理,这与典型的防火墙不同,后者只使用第一个匹配项。最后一个匹配是有效的(也不同于典型的防火墙)。此外,行在配置文件中出现的顺序并不重要——所有 Allow 行都作为一组处理,所有 Deny 行都被视为另一组,并且默认状态被单独考虑。
例如,如果我们在允许规则之前处理拒绝规则,我们可以有效地创建允许 IP 地址的白名单。
order deny,allow
deny from all
allow from 127.0.0.1
相反,在以下示例中,我们在拒绝规则之前处理允许规则,以获得被拒绝 IP 地址的黑名单。
order allow,deny
allow from all
deny from 127.0.0.1
遗产
子目录将继承父目录的规则,除非它们声明了自己的规则。如果子目录使用 order 指令或 allow/deny 指令,则不会继承父目录的规则。有关此行为的确认,请参阅参考本文档的配置部分合并部分的错误 52406 。
对于不实现任何合并逻辑的模块,例如 mod_access_compat,后面部分的行为取决于后面部分是否有来自模块的任何指令。配置将被继承,直到进行更改,此时配置被替换而不是合并。
简单测试
您还可以执行此简单测试来确认此行为。
将以下行放在父目录.htaccess中。
order deny,allow
deny from all
以及子目录中的任何或所有以下行.htaccess。
order deny,allow
deny from 0.0.0.0
您将看到子目录现在可以公开访问,即使父目录包含deny from all并且子目录没有allow from指令。
结论
根据文档和实验,父目录似乎不可能以任何方式覆盖子导演的指令。