站点把后台和接口都挡了,只放行 /admin-ajax.php,robots.txt 里先写 Disallow: /admin/ 再写 Allow: /admin-ajax.php。上线两周后日志里 admin-ajax 的蜘蛛请求为零,页面上的评论和点赞接口全程 404。换过一次书写顺序,没仔细看就发了。

一开始怀疑是「规则写在了错误的 User-agent 分组下,对目标蜘蛛根本没生效」,查了一圈,方向不对。

真正麻烦的地方在于,几个原因的现象几乎一样。同一分组内 Allow 与 Disallow 冲突时按最长匹配,不按书写顺序。也可能是Allow 的前缀比不过更长的 Disallow 前缀,规则形同虚设。

另外,Allow 后面多写了一个斜杠,前缀和实际路径对不上。

第一件事是看线上规则的书写顺序和分组

curl -s https://www.example.com/robots.txt | head -20

然后逐条比对 Allow 与 Disallow 的前缀长度

curl -s https://www.example.com/robots.txt | grep -n -E 'Allow|Disallow'

接着把放行项改到更长、更具体的前缀上

Allow: /admin-ajax.php$

末了改完验证该路径是否恢复可抓

curl -s -o /dev/null -w '%{http_code}\n' https://www.example.com/admin-ajax.php

改完先别撤,确认这几项。admin-ajax 路径重新出现在蜘蛛日志里,页面上的动态接口恢复可用,后台其他路径仍然被挡。

这里还有个坑。Allow 不是白名单开关,它和 Disallow 一起按前缀长度比较,写反了不会报错,只会静默失效。监控比日志更早给出信号,事后回看经常能提前半小时发现异常。

作者 9823189