可主动拦截DotBot爬虫:通过PHP检测User-Agent含“DotBot”并返回403,或在Nginx/Apache配置层提前阻断;推荐服务端拦截而非依赖robots.txt。

DotBot 是一种公开标识自身的爬虫,常被用于内容采集、SEO 分析或链接探测,虽部分行为尚属中性,但若高频访问或绕过 robots.txt,就可能影响服务器性能或造成数据泄露。PHP 无法“彻底阻止”它(任何 HTTP 请求都可被模拟),但可通过服务端检测并主动拦截,有效过滤掉大部分非恶意但无价值的 DotBot 流量。
识别 DotBot 的核心依据
DotBot 在请求头中明确声明其 User-Agent,典型值为:
DotBot/1.2.5 (https://opensiteexplorer.org/)DotBot/1.3.0 (https://datadome.co/bot)- 部分变体可能省略版本号或 URL,但几乎总含 DotBot 字符串
在 PHP 中直接拦截(推荐方式)
将以下代码放入网站入口文件(如 index.php)或 WordPress 的 functions.php 顶部(确保早于任何输出):
if (isset($_SERVER['HTTP_USER_AGENT']) &&
stripos($_SERVER['HTTP_USER_AGENT'], 'DotBot') !== false) {
header('HTTP/1.1 403 Forbidden');
exit('Crawling prohibited');
}说明:
立即学习“PHP免费学习笔记(深入)”;
-
stripos不区分大小写,兼容各种拼写变体 - 返回 403 状态码,符合 HTTP 规范,多数爬虫会尊重并停止后续请求
- 不建议用重定向(302)或静默丢弃(空响应),前者可能被循环调用,后者难以追踪
结合 Nginx/Apache 提前拦截(更高效)
PHP 拦截发生在请求已进入应用层,而 Web 服务器层拦截更早、更轻量。推荐优先配置:
-
Nginx(在 server 块内添加):
if ($http_user_agent ~* "DotBot") { return 403; } -
Apache(.htaccess 或虚拟主机配置):
RewriteCond %{HTTP_USER_AGENT} DotBot [NC]<br>RewriteRule ^ - [F]
优势:不消耗 PHP 进程资源,对高并发场景更友好;与宝塔面板的 UA 过滤规则完全兼容。
进阶:区分合法与非法 DotBot 行为
少数正规工具(如 Moz 的旧版爬虫)也用 DotBot 标识。若需白名单机制,可补充 Referer 或请求频率判断:
- 仅拦截无 Referer 或 Referer 非搜索引擎的 DotBot 请求
- 搭配 IP 限速(如每分钟超 5 次即封 10 分钟),避免误伤单次合规探测
- 记录日志:
error_log("DotBot blocked: " . $_SERVER['HTTP_USER_AGENT'] . " from " . $_SERVER['REMOTE_ADDR'], 3, '/var/log/dotbot-block.log');
不需要依赖 robots.txt 禁止——DotBot 虽通常遵守该协议,但无法强制约束;真正有效的拦截必须落在服务端请求处理链路上。



















