先给结论:大小写差异不能靠“全部转小写”或“全站强制跳转”二选一,而要先把路径分成“已对外发布”和“仅内部引用”两类,再决定用301映射、服务器大小写不敏感配置还是构建期规范化来统一。判断依据不是谁说得对,而是同一路径在不同角色(前端、运维、内容编辑)手里是否指向同一份资源。
常见场景是:内容编辑在CMS里填了 /Images/Banner.png,前端构建工具输出时改成了 /images/banner.png,而运维在Nginx上配置了区分大小写的规则。结果编辑预览正常,线上部分页面图片404。此时团队往往分成两派:一派认为“服务器应该忽略大小写”,另一派认为“代码里写错就该改代码”。
这两种解释都成立,但适用条件不同。服务器忽略大小写适合“历史遗留路径多、改代码成本高”的站点;构建期规范化适合“新项目、路径由工具生成、可控性强”的站点。选错方向会导致修复动作互相抵消。
要区分是“映射缺失”还是“引用错误”,可以按下面顺序取证据:
这些证据指向不同动作:引用层问题优先改构建配置;映射层问题优先加服务器规则;两者都乱时,先冻结新路径写法,再处理存量。
假设一个站点有约200个历史图片路径混用大小写,其中约30个已被外部页面引用。可以这样做:
执行后,如果外部引用的大写路径返回301而不是404,说明映射生效;如果构建产物中不再出现大写路径,说明引用层已收敛。下一步应观察服务器日志中是否仍有大写路径请求,若有,说明还有未清理的外部引用或缓存,需要继续保留映射而不是立即删除。
全站强制小写并不总是安全。若站点已有大量外部链接指向大写路径,直接301到小写会损失一部分传递信号,且需要长期维护映射表。更稳妥的做法是:对已发布路径保留原大小写并做301到规范版本,对新路径从生成环节就统一。这样既避免404,又不把映射表无限扩大。
另外,robots.txt的抓取限制不等于可靠的索引移除,站点地图也不保证收录。大小写映射解决的是“同一资源能否被稳定访问”,不解决索引状态。若映射后仍有页面不收录,应单独核查抓取和索引信号,而不是继续加大小写规则。
团队可以把“路径大小写”变成一张核对表:每个路径记录当前实际返回状态、规范版本、映射方式、负责人。前端负责构建期规范化,运维负责服务器映射,编辑负责发布前检查。每周抽查一批路径,确认大写请求返回301、小写请求返回200,且源码中不再出现大写引用。这样,大小写差异就从“谁写错了”的争论,变成“哪一层还没统一”的可验证问题。