首页 > 解决方案 > 在 Apache .htaccess 中使用两个环境变量来阻止访问

问题描述

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

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

如何根据变量 1 和变量 2 的组合拒绝?

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

在伪代码中,我现在想这样做:

Deny from env=BlockedCountry && !NeverBlock

标签: apache.htaccessenvironment-variablesmod-access

解决方案


来自Apache 文档

语法:拒绝所有|host|env=[!]env-variable [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条件。


推荐阅读