如何拦截YandexBot爬虫?现有方案失效求排查及新建议
问题排查与解决方案
失效原因分析
- 正则匹配规则完全错误:你使用的
^yandex.com$要求整个User-Agent字符串严格等于yandex.com,但实际YandexBot的UA是Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots,包含的是YandexBot/3.0和yandex.com/bots片段,并非完全匹配,导致bad_bot_block环境变量从未被触发。 - 配置逻辑额外问题:
- 第一种
Order Allow,Deny写法中,Allow from ALL会优先覆盖Deny规则(Apache按Order顺序处理,最后生效的规则是Deny,但Allow from ALL会让所有请求先被允许,Deny条件无法生效)。 - 第二种
<RequireAll>写法逻辑本身没问题,但因为匹配规则失效,bad_bot_block从未被设置,相当于没有拦截限制。
- 第一种
正确拦截配置方案
方案1:修正SetEnvIfNoCase规则
根据你的Apache版本选择对应配置,核心是修正UA匹配规则:
Apache 2.2 适配
SetEnvIfNoCase User-Agent "(YandexBot|yandex\.com/bots)" bad_bot_block Order Deny,Allow Deny from env=bad_bot_block Allow from ALL
- 调整
Order顺序为Deny,Allow,确保被标记的bot先被拒绝,其余请求允许。 - 正则匹配UA中包含
YandexBot或yandex.com/bots的请求,不区分大小写。
Apache 2.4 适配
SetEnvIfNoCase User-Agent "(YandexBot|yandex\.com/bots)" bad_bot_block <RequireAll> Require all granted Require not env bad_bot_block </RequireAll>
- 仅修正匹配规则,保持Require逻辑不变,触发环境变量的请求会被拦截。
方案2:使用RewriteRule拦截(已开启RewriteEngine)
利用Rewrite规则直接匹配UA并返回403:
RewriteEngine On RewriteCond %{HTTP_USER_AGENT} (YandexBot|yandex\.com/bots) [NC] RewriteRule ^ - [F,L]
[NC]:不区分大小写匹配[F]:返回403 Forbidden状态码[L]:终止后续Rewrite规则处理
验证方式
用curl模拟YandexBot请求,检查是否返回403:
curl -A "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)" http://你的域名.com
内容的提问来源于stack exchange,提问作者user3052443
相关产品推荐
相关产品推荐

