这个坑值得记一笔。key 文件放在站点根目录,浏览器直接打开是 200,返回的却是首页 HTML,文件内容一个字都没有,IndexNow 每次校验都报 key not found,同目录下的 robots.txt 反而正常。
刚开始盯着「文件实际在另一个发布目录,软链接没跟上」,折腾了半个多小时,排掉了。
原因不止一个,得分开看。Nginx 的 try_files 兜底把不存在的路径全交给 index.php;重写规则按扩展名匹配,.txt 没有被单独排除;CDN 缓存了之前的 404 页面并把它当成 200 返回。
上来先看 key 地址返回的 Content-Type 和前 100 字节
curl -sI https://www.example.com/8f3a2c.txt; curl -s https://www.example.com/8f3a2c.txt | head -c 100
接着在伪静态里为 txt 加一条精确放行
location = /8f3a2c.txt { default_type text/plain; try_files /8f3a2c.txt =404; }
随后确认源站文件确实存在且权限可读
ls -l /var/www/example/8f3a2c.txt && stat -c '%a' /var/www/example/8f3a2c.txt
刷新 CDN 上这条地址的缓存
curl -X PURGE https://www.example.com/8f3a2c.txt
怎么算真的好了,看的是同一批现象。key 地址返回 text/plain 且内容与文件完全一致,IndexNow 提交返回 200,响应体里不再是 key not found。
提醒一点。校验文件要放在所有重写规则之前匹配,否则规则越复杂,越容易被兜底逻辑吃掉。如果同一现象隔几天又出现,说明根因没找到,别当偶发处理。
