根据 http 标头拒绝通过 htaccess 访问网站

根据 http 标头拒绝通过 htaccess 访问网站

我尝试了好久才让它工作,但就是搞不清楚。我想做的是根据 CloudFlare 添加的 CF-IPCountry 标头阻止来自多个国家/地区的网站访问。我认为 htaccess 是执行此操作的合适方法。

我们在 DirectAdmin 上运行 LiteSpeed 4.2.4 作为控制面板。

我们遇到的问题是 htaccess 规则似乎没有起到任何作用。

这是我们尝试的规则:

SetEnvIf CF-IPCountry AU UnwantedCountry=1
Order allow,deny
Deny from env=UnwantedCountry
Allow from all

这没有任何区别,连接仍然被接受。为了检查规则是否至少正在处理,我将“全部允许”更改为“全部拒绝”,结果连接被拒绝。所以这似乎是变量的问题。

这是与请求相关的标头。

Connection: Keep-Alive 
Accept-Encoding: gzip 
CF-Connecting-IP: xx.xx.xx.xx
CF-IPCountry: AU 
X-Forwarded-For: xx.xx.xx.xx.xx
CF-RAY: c9062956e2d04b6 
X-Forwarded-Proto: http 
CF-Visitor: {"scheme":"http"} 
Zone-Name: xx.com.au

希望有人能帮助我,这件事让我抓狂太久了。

谢谢

更新

我现在通过将 RewriteLogLevel 9 添加到虚拟主机来启用重写日志记录。

最初,我使用所有其他 htaccess 规则进行了测试,这些规则对于这个网站来说相当广泛,我可以看到各种匹配都被记录下来,所以我知道日志记录工作正常。

为了测试这种情况,我将 htaccess 精简到最基本,因此在 htaccess 中我有以下内容:

SetEnvIf CF-IPCountry AU UnwantedCountry=1
Order allow,deny
Deny from env=UnwantedCountry
Allow from all

在我的 htaccess 中,根本没有日志输出,这说明它根本不符合我猜测的规则。我再次验证了“CF-IPCountry: AU”是否存在于标题中。

答案1

作为使用的替代方法,SetEnvIfRewriteRule也可以使用 a 来执行此操作。

RewriteCond %{HTTP:CF-IPCountry} ^(AU|SE)$
RewriteRule ^ - [F,L]

这将阻止 AU 和 SE 用户。

相关内容