先给有条件的结论:如果服务器运行在区分大小写的文件系统上,而站内链接、重定向或站点地图里混用了大小写不同的路径,那么统一映射到小写路径通常是最省事的做法;但前提是旧路径确实不再需要保留独立入口,且服务器端能对旧写法做一次性的规范化跳转。若旧内容或旧合作关系仍有价值、必须保留原样访问,那么统一映射就不能简单删掉大写入口,而要建立“原路径到规范路径”的显式映射表,再让死链检查工具按映射后的结果判断哪些链接真的失效。
路径大小写差异在死链检查里会表现为两种完全不同的现象,处理方式也不同。
/Docs/Setup.html 和 /docs/setup.html 实际指向同一份内容。这类问题适合统一映射到小写,减少重复入口。/Archive/2020/ 和 /archive/2020/ 是两个目录。这类问题不能盲目合并,否则会把仍然有价值的旧内容错误地归到新路径下。判断依据不是路径看起来像不像,而是服务器返回的状态码和内容是否一致。对同一路径的两种写法分别请求,如果都返回 200 且内容相同,说明可以统一;如果一种返回 200、另一种返回 404,说明它们本来就是不同资源,映射时必须保留差异。
不同服务器和文件系统对大小写的处理并不一致。Linux 服务器通常区分大小写,Windows 服务器通常不区分。死链检查工具在抓取时如果只按一种写法请求,就可能漏掉另一种写法导致的 404。因此,统一映射的第一步不是改链接,而是确认当前环境到底区分不区分大小写。
可以做一个最小验证:在站点上选一个已知存在的路径,把其中一段改成不同大小写,分别请求并记录状态码。如果两种写法都返回 200,说明服务器或中间层已经做了不区分大小写的处理;如果只有一种返回 200,说明大小写是有效的区分维度。这个结果直接决定后续映射表要不要保留大写条目。
当旧内容、旧系统或旧合作关系需要退出,但其中一部分仍然有价值时,批量把链接替换成小写会误伤那些靠大小写区分的旧资源。更稳妥的做法是建立一张显式映射表,每一行记录“原始路径、规范路径、处理方式”。
这里有一个假设例子:假设旧站点有 /Legacy/Report/ 和 /legacy/report/ 两个入口,前者仍有外部合作方引用,后者已经废弃。如果统一映射到小写,前者会被错误地跳转到废弃路径,合作方的链接就会失效。正确做法是只把后者标记为退出,前者保留并单独维护。这个例子说明,映射方向取决于旧入口是否仍有外部依赖,而不是取决于路径本身是否好看。
如果旧合作关系或旧系统仍然按原始大小写请求资源,而你把所有路径都强制跳转到小写,那么这些请求可能因为中间层不区分大小写而暂时正常,也可能因为跳转链路过长而超时。更关键的是,如果旧系统在回调或校验时对比的是原始路径字符串,跳转后的路径不一致会导致校验失败。
这种情况下,统一映射的结论就失效了。你需要改为保留原始路径的独立入口,只在站内链接和站点地图里使用规范路径。死链检查工具的作用也随之改变:它不再用来判断“哪些路径该合并”,而是用来确认“保留的原始入口是否仍然返回正确内容”。
实际操作时,先用死链检查工具导出全部含大写字母的路径及其状态码,按“内容是否一致”分成两组。对内容一致的那一组,设置一次性 301 跳转到小写路径,并观察跳转后工具是否还报告 404。对内容不一致的那一组,先不动路径,只修复其中确实返回 404 的链接。完成这一步后,再决定是否需要把映射表写入重定向配置或站点地图。这样做的结果是:你能明确知道哪些大小写差异是冗余的、哪些是必须保留的,而不是把所有差异都当成同一个问题处理。