You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何拦截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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 02:24:12