apache屏蔽某UA,是通过设置 SetEnvIfNoCase User-Agent
来实现,不过我发现网上很多文章的写法是不正确的,我亲测后,把正确的写法记下来,同时也把错误的写法记下来,以被日后参考。
举例说明,假如apache要屏蔽的UA包含字符串“Googlebot”,那么 SetEnvIfNoCase User-Agent
的设置该如何写呢?
正确写法是:
SetEnvIfNoCase User-Agent ^.*Googlebot.* bad_bot
Order allow,deny
Allow from all
Deny from env=bad_bot
错误写法:
SetEnvIfNoCase User-Agent "^.*Googlebot.*" bad_bot
...
代码分析:
符号“^
”表示字符串开始位置,“.*
”表示任意字符。
错误的写法是多了双引号“"
”,SetEnvIfNoCase User-Agent
后面的字符串是不需要用双引号引住的,否则是设置错误,不能按预期屏蔽某个UA。
但如果字符串不需要用到正则时,可以用双引号。例如下面的例子写法:
SetEnvIfNoCase User-Agent "Baiduspider" bad_bot
Order Allow,Deny
Allow from All
Deny from env=bad_bot
SetEnvIfNoCase User-Agent "Baiduspider"
是指这个UA的字符串中包含 Baiduspider
这几个字符。本例 Baiduspider
要不要双引号都可以,因为没有用到正则。
知识扩展:一个很有用的apache指令SetEnvIfNoCase
说明:根据请求的属性设置环境变量,而不考虑情况。
语法:SetEnvIfNoCase 属性 正则 [!]环境变量[=值] [[!]环境变量[=值]] ...
上下文:服务器配置, 虚拟主机, 目录, .htaccess
覆盖项:FileInfo
状态:Base
模块:mod_setenvif
兼容性:Apache 1.3 and above
SetEnvIfNoCase
与 SetEnvIf
指令语义相同,不同之处在于正则表达式匹配是不区分大小写的方式进行。例如:
SetEnvIfNoCase Host Apache\.Org site=apache
如果 HTTP 请求头“Host:
”包含 Apache.Org
, apache.org
,或其他任何组合,就把环境变量 site 的值设为“apache”。SetEnvIfNoCase
当满足某个条件时,为变量赋值,一般结合其他指令使用。
如:
1、
SetEnvIf Request_URI "/logo(.)+" local_ref=0
Allow from env=local_ref
当local_ref
有值时,可以访问。
2、
SetEnvIfNoCase Request_URI .js$ useless-file
CustomLog logs/hebgc.com/access.log combined env=!useless-file
当满足条件时才记录日志。
☉Apache设置浏览器缓存 (2016-11-1 13:37:30)
☉安装Apache选择8080端口,安装完毕启动Apache失败的原因 (2016-11-1 11:26:22)
☉阿里云主机windows系统Apache启用浏览器缓存的方法 (2015-11-13 22:5:9)
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。