.htaccess中无法匹配Go-http-client的HTTP_USER_AGENT问题求助
解决Go-http-client无法被RewriteCond拦截的问题
嘿,我来帮你搞定这个小问题!你遇到的核心问题其实是正则转义的误区——在Apache的RewriteCond正则表达式里,连字符-并不是需要转义的特殊元字符,你额外加的反斜杠反而搞砸了匹配。
问题原因
你原来的规则里写了go\-http\-client,这里的\-会被正则解释为匹配字面的反斜杠加上连字符,但实际的Go HTTP客户端的User-Agent(比如Go-http-client/1.1)里根本没有反斜杠,自然匹配不上。
修正后的规则
把转义的反斜杠去掉,直接写go-http-client就可以了,配合[NC]标记不区分大小写,就能完美匹配各种大小写形式的Go-http-client:
RewriteCond %{HTTP_USER_AGENT} (bot|spider|crawl|archiver|seeker|slurp|facebook|twitter|go-http-client) [NC]
额外调试小技巧
如果之后还是有疑问,可以试试开启Apache的Rewrite日志(在配置里设置RewriteLogLevel 3),这样就能看到每个请求的User-Agent和正则匹配的过程,方便排查问题。或者临时加一条规则输出当前的User-Agent值,确认你要拦截的请求的实际标识:
RewriteRule ^ - [E=UA:%{HTTP_USER_AGENT}] Header set X-Debug-UA "%{UA}e" env=UA
这样你就能在响应头里看到X-Debug-UA,确认目标爬虫的真实User-Agent字符串。
内容的提问来源于stack exchange,提问作者autobottodoggo
相关产品推荐
相关产品推荐

