这类问题我又碰上了一次。robots.txt 里先写了 Disallow: /private/ 又写了 Allow: /private/public/,结果公开目录还是被抓走,私有目录也没挡住。
原因不止一个,得分开看。规则按最长匹配优先,不是按书写顺序,很多人以为后写的覆盖前面;路径长度相同时 Allow 优先于 Disallow,这一点常被忽略;通配符和结尾符匹配的范围与预期不一致,导致误判。
先把规则按路径长度排序检查冲突
grep -E 'Allow|Disallow' robots.txt | sort
随后用测试工具逐条验证实际匹配结果
curl -s https://www.example.com/robots.txt
末了把例外规则写成更长的精确路径
Allow: /private/public/
我习惯把每一步的执行时间和结果记在一边,后面复盘省事。
改之前我把相关日志按时间截了一段存着,事后对时间线用得上。
恢复的判定其实很直接。测试工具对公开目录返回 allowed,私有目录返回 disallowed,日志里私有路径不再被抓。
补一句。谷歌支持 * 和 $ 通配符,百度对这两者支持有限,跨引擎时尽量用纯路径前缀写法,兼容性最好。报错文案容易误导,真正的原因往往在相邻那一层的日志里。