这个坑值得记一笔。改版把 /Article/ 改成了 /article/,源站 Nginx 对大小写不敏感,两种写法都能打开。CDN 的缓存键区分大小写,两套地址都被收录,同一篇文章在索引里出现两份。

刚开始盯着「站内链接新旧混杂,模板里还有大写目录」,折腾了半个多小时,排掉了。

真正麻烦的地方在于,几个原因的现象几乎一样。源站文件系统不区分大小写,两种路径都返回 200;CDN 缓存键区分大小写,各自缓存一份;canonical 输出大写路径,与 sitemap 不一致。

先确认两种写法返回码

curl -s -o /dev/null -w '%{http_code}\n' https://www.example.com/Article/1 https://www.example.com/article/1

接着看 CDN 是否按大小写分缓存

curl -sI https://www.example.com/Article/1 | grep -i 'x-cache'

然后把大写目录 301 到小写

rewrite ^/Article/(.*)$ /article/$1 permanent;

末了统一模板与 sitemap 的路径

grep -rn '/Article/' wp-content/themes/ | head

隔了一天再看,现象没变,说明不是偶发。

怎么算真的好了,看的是同一批现象。大写路径返回 301,索引里重复的文章条目在一个月内合并成一条。

提醒一点。大小写问题在本地环境常被忽略,Windows 和 macOS 默认就不区分。监控比日志更早给出信号,事后回看经常能提前半小时发现异常。

作者 9823189