先给结论:如果同一份内容因为路径大小写不同而产生了两个可访问地址,优先做的是统一映射,而不是急着删掉其中一个。统一映射的核心是选一个规范形式,让另一个形式稳定地指向它;只有在无法稳定映射、或者旧形式已经被大量外部引用且业务不允许改动时,才考虑保留双份并各自维护。判断依据不是某个工具报了什么,而是你的服务器文件系统、URL 生成逻辑和外部引用三者是否一致。
路径大小写差异在不同环境下表现完全不同,这决定了你能不能靠“改写”解决。
/Images/Logo.png 和 /images/logo.png 是两个不同文件,两个地址都能返回 200。实际动作:先在一台能访问源站的机器上,用 curl -I 分别请求大小写不同的两个路径,记录状态码和最终 URL。如果两者都返回 200 且内容一致,说明问题在 URL 生成和引用层,而不是文件本身缺失;如果其中一个 404,说明文件系统区分大小写,你需要先决定保留哪个物理文件。
保留适用于你的站点可以控制全部内部链接、且外部引用量不大的情况。做法是选定一个小写路径作为规范形式,把其他大小写变体通过服务器规则或应用层路由统一指向它。
假设一个场景:产品图放在 /Images/Product/A.png,但模板里有时输出 /images/product/a.png。如果你决定保留小写形式,就需要在服务器配置里加一条规则,把大写请求 301 到小写地址,同时修改模板的生成逻辑,让它以后只输出小写。动作的结果是:外部旧链接仍然可用,但最终都落到同一个地址;后续再出现大小写混用,也不会产生新的重复地址。
这里要留意一个常见误判:服务器返回 301 并不等于问题已经解决。如果模板逻辑没改,新页面还会继续生成大写链接,映射规则只是在不断救火。所以保留策略必须同时改生成端,否则下一步你会看到映射规则越加越多。
改写适用于你能直接改动文件结构、且外部引用的大写地址数量很少的情况。做法是把物理文件名和目录名统一改成小写,再让应用层只按小写查找。
适用前提有两个:一是你有权限重命名文件并同步更新所有引用;二是旧的大写地址没有大量外部链接。如果不满足第二点,直接重命名会让旧地址 404,而 404 对已有排名的页面是实打实的损失。此时更稳妥的顺序是:先加映射规则让旧地址可用,观察一段时间访问日志,确认旧地址请求量已经很低,再考虑是否移除映射。
需要说明的是,访问日志里某个大写路径的请求量降到零,不能单独证明可以安全移除映射。它可能只是被缓存、被 CDN 边缘节点拦截,或者爬虫暂时没来。合理解释至少包括:请求被上游缓存吸收、日志采样丢失、该路径本身流量就低。判断移除前,应该结合多个来源的请求记录,而不是只看一个日志文件。
退出只在一种条件下成立:旧的大小写形式从未被外部引用,或者引用它的页面已经下线且没有流量价值。这种情况下,继续维护映射反而是负担。
但退出不等于什么都不做。你应该确认旧形式确实没有出现在站点地图、内部链接和已知的外部引用中。站点地图不保证收录,但站点地图里如果还列着旧形式,等于在主动把错误地址递给爬虫。同理,robots.txt 的抓取限制不等于可靠的索引移除,它只阻止抓取,不保证已索引的地址会消失。所以退出策略需要配合页面层面的处理,而不是只靠一条抓取规则。
把上面的取舍落到可操作的判断上,你可以按这个顺序收集证据:
这四步的结果会直接改变下一步:如果第 1 步显示两个地址都正常,你不需要动文件,只需要统一 URL 生成;如果第 2 步显示外部请求很多,改写和退出都应推迟,先做映射。把证据收集和动作绑定,比先选一个方案再找理由更可靠。