使用两个环境变量来阻止Apache .htaccess中的访问

时间:2018-12-02 17:47:33

标签: apache .htaccess environment-variables mod-access

我正在使用SetEnvIf和Deny阻止对.htaccess中某些国家/地区的访问。

但是我需要从此阻止中排除某些URL,因此我要为这些URL设置另一个环境变量。

如何基于变量1和变量2的组合来拒绝?

SetEnvIf GEOIP_COUNTRY_CODE xx BlockedCountry
SetEnvIf Request_URI "^/important" NeverBlock

现在我要用伪代码执行此操作:

Deny from env=BlockedCountry && !NeverBlock

1 个答案:

答案 0 :(得分:1)

来自Apache documentation

  

语法:拒绝所有人|主机| 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条件。