我正在使用SetEnvIf和Deny阻止对.htaccess中某些国家/地区的访问。
但是我需要从此阻止中排除某些URL,因此我要为这些URL设置另一个环境变量。
如何基于变量1和变量2的组合来拒绝?
SetEnvIf GEOIP_COUNTRY_CODE xx BlockedCountry
SetEnvIf Request_URI "^/important" NeverBlock
现在我要用伪代码执行此操作:
Deny from env=BlockedCountry && !NeverBlock
答案 0 :(得分:1)
语法:拒绝所有人|主机| env = [!] env变量 [host | env = [!] env-variable] ...
这意味着您可以一个接一个地组合条件(两者之间没有“布尔”运算符)。
因此,在您的情况下,它应该看起来像这样
Deny from env=BlockedCountry env=!NeverBlock
从您所说的来看,这似乎意味着一个OR
条件,而不是AND
(您想要的)。为此,您可以使用此替代方法
SetEnvIf GEOIP_COUNTRY_CODE xx MustBeBlocked
SetEnvIf Request_URI "^/important" !MustBeBlocked
Deny from env=MustBeBlocked
使用这种技术,您可以根据情况设置/取消设置环境变量,从而模拟AND
条件。