基于http头拒绝通过htaccess访问网站

nee*_*ter 0 httpd .htaccess litespeed

我一直在努力让它发挥作用,但我无法解决它。我想要做的是根据 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
Run Code Online (Sandbox Code Playgroud)

这根本没有区别,连接仍然被接受。只是为了检查规则是否至少正在处理,我将允许从全部更改为从全部拒绝,并且连接被拒绝。所以这似乎是变量的问题。

这是请求中的相关标头。

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
Run Code Online (Sandbox Code Playgroud)

希望有人能帮助我,这让我发疯太久了。

谢谢

更新

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

最初我使用我所有其他的 htaccess 规则运行测试,这些规则对于这个站点来说非常广泛,我可以看到所有的匹配项都被记录下来,所以我知道日志记录工作正常。

为了测试这个案例,我将我的 htaccess 剥离到裸露的骨头,所以我的 htaccess 中有以下内容:

SetEnvIf CF-IPCountry AU UnwantedCountry=1
Order allow,deny
Deny from env=UnwantedCountry
Allow from all
Run Code Online (Sandbox Code Playgroud)

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

小智 5

作为使用的替代方法,SetEnvIf您也可以使用 a 来执行此操作RewriteRule

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

这将阻止 AU 和 SE 用户。