这类问题我又碰上了一次。在服务器上改了 robots.txt,WordPress 又自动生成一份覆盖掉,文件内容每天变回去,面板里看到的和线上返回的完全不一样。
这类报错背后常见的原因有几处,逐个排除就行。WordPress 在没有物理文件时用虚拟 robots.txt 输出;主题或插件挂载了 robots_txt 过滤器追加规则;宝塔的文件保护会在保存后自动还原。
第一件事是确认是否存在物理文件
ls -l /www/wwwroot/site/robots.txt
随后用过滤器追加自定义规则
add_filter('robots_txt', 'my_robots', 20);
等前面都确认过,再关闭面板的文件保护再写入
chattr -i /www/wwwroot/site/robots.txt
手上没有现成的复现脚本,就照着线上请求手工拼了一个。
怎么算真的好了,看的是同一批现象。访问 robots.txt 能看到追加的行,重启和重新生成后内容保持不变,面板与线上返回一致。
物理文件和虚拟输出同时存在时,WordPress 会优先用物理文件,改动前先确认到底是哪一份在生效,否则改了也没反应。报错文案容易误导,真正的原因往往在相邻那一层的日志里。