先给结论:如果同一批文件在测试环境能访问、上线后只有部分 URL 报错,而报错又集中在路径中大小写混用的条目上,那么你要处理的不是“二级域名是否存在”的问题,而是主机名之后那段路径在不同系统上的大小写规则不一致。二级域名只是主机名结构中的一层,真正引发冲突的是路径映射。统一映射的正确动作,是先在服务器和 CDN 回源层确定一种大小写规范,再把所有入口按同一规则改写,而不是逐个 URL 手工改链接。
假设一个站点使用 img.example.com 这类二级域名承载静态资源,路径中同时存在 /Uploads/Photo.jpg 和 /uploads/photo.jpg 两种写法。在开发机上,因为文件系统本身不区分大小写,两种写法都能命中同一个文件;上线到区分大小写的 Linux 环境后,只有与真实文件名完全一致的那一种能命中。于是出现“抽查几个链接都正常,批量跑全站时却报出大量 404”的矛盾。
这类问题的边界很清楚:如果所有路径从一开始就保持同一大小写,或者服务器对路径做了不区分大小写的映射,那么它不会暴露。一旦出现混合大小写、并且托管环境对大小写敏感,例外就会随样本量增加而放大。
第一种解释是文件本身的真实名称就存在大小写差异。例如同一目录下确实同时存在 Photo.jpg 和 photo.jpg,而引用时只写了其中一种。这种情况靠统一映射无法彻底解决,因为两个文件是不同实体,必须决定保留哪一个、删除哪一个,或把另一个重定向过去。
第二种解释是文件只有一个真实名称,但引用入口的写法不统一。例如磁盘上只有 Photo.jpg,而 HTML、CSS、JS、站点地图、内链中分别写成 photo.jpg、PHOTO.JPG。此时文件没问题,问题在于“谁在引用它、按什么规则解析”。统一映射针对的正是这一种。
两者的处理代价不同:前者要动文件,后者只动引用和映射规则。判断错了方向,就会在错误的一层反复修补。
要区分它们,可以按下面几步取证:
/A.jpg 和 /a.jpg 当作两个对象,那么即使源站只有一个文件,边缘也可能分别缓存,放大不一致。需要提醒的是,抓取量或请求量在某个路径上归零,并不能单独证明映射已经正确。归零还可能来自抓取预算变化、链接被移除、robots.txt 限制或缓存命中改变。要结合真实文件列表和回源日志一起看。
确定属于引用写法问题后,可以采取以下动作:
这个动作的结果会直接影响下一步:如果重定向后非规范请求持续下降、规范路径稳定命中,说明映射层已经收口,可以进入清理阶段;如果非规范请求不降反升,说明仍有入口在生成旧写法,需要回到构建或模板层排查,而不是继续加重定向规则。重定向只是过渡,长期依赖它会增加一次额外跳转,也可能让缓存键继续分裂。
统一映射并非对所有情况都成立。若同一路径下确实存在仅大小写不同的多个文件,强制统一会覆盖或丢失其中一个,必须先做文件去重和引用归属判断。若站点使用对象存储,其键名通常区分大小写,映射规则要写在访问层而非存储层。若站点地图或 robots.txt 中引用了非规范路径,也要同步更新,因为站点地图不保证收录,robots.txt 的抓取限制也不等于可靠的索引移除,它们都不能替代映射本身的正确性。
把二级域名与路径大小写分开看,才能定位到真正需要统一的那一层:主机名结构决定请求发往哪里,路径映射决定请求能否命中。先确认文件是否唯一,再决定是改文件还是改映射,这一步判断对了,后面的重定向和批量改写才有意义。