核心判断是:不要试图让服务器同时兼容两种大小写,而应确定一个规范形式,把旧路径逐条映射过去,并让映射规则可验证、可回滚。以下用一个假设情境串起决策过程。
假设某站早年由外包团队开发,图片目录写作 /Images/,而现在的模板引用 /images/。在 Windows 服务器上两者都能命中,迁移到区分大小写的 Linux 环境后,部分页面图片全部失效。此时旧合作关系已结束,旧系统即将下线,但其中一批产品图仍要保留。问题不是“要不要改”,而是“改哪一侧、映射到什么形式、怎么确认改对了”。
统一映射的第一步是选定唯一规范形式。常见取舍有两种,成立条件不同:
两种都成立的前提是:映射后任一 URL 只能对应一个资源,不能出现两个大小写版本同时返回 200 且内容相同。若两者并存,后续判断重复内容、日志归因和缓存命中都会失真。
选定方向后,把规则写到最靠近请求入口、又便于验证的一层。若用服务器重写,规则应只做大小写归一,不做其他跳转,避免把排查变量混在一起。若用应用路由,则要在路由表里显式列出旧路径到新路径的对应关系,而不是依赖框架的宽松匹配。
一个可操作的动作是:先导出访问日志中出现过的大小写变体,去重后得到一张旧路径清单,再为每条生成目标路径。清单生成后,逐条请求旧地址,记录返回状态码与最终地址。结果如何影响下一步很直接——若旧地址返回 301 且落到唯一目标,映射成立;若返回 200 却内容不同,说明存在两份资源,必须先合并再继续;若返回 404,说明清单漏项,需要回到日志补全。
映射完成后,有人会顺手更新站点地图并寄望于它解决问题。需要明确:站点地图不保证收录,它只是提交候选地址。同样,用 robots.txt 屏蔽旧路径的抓取,并不等于可靠的索引移除,被屏蔽的 URL 仍可能以其他形式出现在结果中。这两者都不能替代“旧地址是否唯一跳转到新地址”这一验证。
若旧内容确实要退出,正确的顺序是先确认映射生效,再处理索引层面的退出信号。把顺序颠倒,容易出现旧地址被限制抓取、新地址又未被发现,两边都处于不确定状态。
当映射上线后仍出现异常,可按以下证据区分原因,而不是凭感觉调整:
把这张清单跑一遍,再决定是扩大映射范围还是回滚某条规则,比反复猜测服务器行为更可靠。等所有旧地址都稳定落到唯一目标、且不再出现双重命中,才适合进入旧系统的正式下线环节。