当同一套内容在主域名和二级域名之间迁移或并行时,路径大小写差异通常不会在少量样本上暴露,但规模一上来就会出现部分页面能访问、部分页面指向错误位置的情况。要统一映射,核心不是把所有链接改成小写,而是先确认服务器文件系统是否区分大小写,再决定用重定向、规范化链接还是构建期改写来收敛。
路径大小写问题看起来都是“链接打不开”,但成因不同,处理方向也不同。
/Images/A.jpg 和 /images/a.jpg 是两个不同文件。此时错误链接会直接 404,问题暴露得快。/Images/A.jpg 能命中 /images/a.jpg。本地和测试环境一切正常,部署到区分大小写的生产环境后才批量失效。这两种成因对应的修复位置完全不同:前者要在链接生成和重定向层解决,后者往往要在构建或部署环节统一路径命名,否则问题会被环境差异反复放大。
不要凭“本地能打开”下结论。可以按下面的顺序取证:
/assets/Logo.png 请求为 /assets/logo.png。返回 404 说明该环境区分大小写;返回 200 说明不区分。这里要提醒一点:抓取量或请求量下降、日志里某类路径请求归零,都不能单独证明映射已经正确。它也可能是抓取预算转移、页面被其他规则拦截、或统计口径变化造成的。判断映射是否生效,仍要回到具体 URL 的响应状态和最终落地内容。
确认成因后,可选的处理方式主要有三类,各有前提。
把大小写错误的请求 301 到正确路径,适合历史链接已经外发、无法全部回收的情况。前提是你能列出错误变体,或能用规则匹配。注意重定向链不要过长,且要避免把正确路径也重定向到自身形成循环。
在生成静态文件或打包时,强制所有输出路径为统一大小写(通常是小写),并同步改写页面内引用。适合新项目或可重新构建的站点。前提是构建流程可控,且 CDN 或对象存储不会再次改变键名。
在模板、CMS 字段或导航配置中统一路径写法,从源头减少错误变体。适合内容量还在增长、可以逐步替换的场景。它不能修复已经存在的错误外链,需要和重定向配合。
一个假设例子:某站点把图片目录从 /Images/ 改为 /images/,模板里仍保留旧写法。若只做链接层替换,历史外链仍会 404;若只做重定向而不改模板,新页面会持续产生新的错误变体。两者需要同时进行,并在一段时间后检查重定向命中量是否下降,以此判断源头是否收敛。
当内容同时存在于主域名和二级域名,路径大小写问题会多一层:两个主机名可能指向不同服务器、不同文件系统,甚至不同部署流程。此时不能假设在一侧验证通过就能套用到另一侧。
实际动作上,可以先选一个二级域名做小范围验证:固定一批路径,分别请求大小写变体,记录状态码和最终 URL。如果结果一致,再把这套规则推到其他主机;如果不一致,说明部署链路存在差异,需要先对齐构建和发布流程,而不是继续加重定向规则。
统一映射不是改完就结束。可以保留以下检查项:
把这些检查点固定下来,下次再遇到环境迁移或二级域名拆分时,就能先判断是文件系统差异还是链接生成问题,再选择对应的统一映射方式,而不是盲目全站改小写。