我尝试了好久才让它工作,但就是搞不清楚。我想做的是根据 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
作为使用的替代方法,SetEnvIf
您RewriteRule
也可以使用 a 来执行此操作。
RewriteCond %{HTTP:CF-IPCountry} ^(AU|SE)$
RewriteRule ^ - [F,L]
这将阻止 AU 和 SE 用户。