先给结论:大小写差异造成的死链,不能靠“把所有链接改成小写”一次性解决,而要先确认服务器文件系统是否区分大小写,再决定是统一映射到小写,还是保留原路径并建立重定向。Linux 服务器通常区分大小写,Windows 服务器通常不区分;同一套链接在本地正常、上线后 404,往往就是这个差异。核对时把每个 URL 的路径部分逐段比对,而不是只看整条链接是否可打开。
如果服务器文件系统区分大小写,且现有文件本身混用大小写,正确做法是把 URL 统一映射到实际存在的文件路径,而不是强行规定全站小写。此时可以保留原始文件名,通过重定向把历史链接指向真实路径。判断依据是:文件是否已经存在、是否被外部引用、改文件名是否会牵动其他系统。
如果服务器文件系统不区分大小写,但代码或模板里写死了大小写不一致的路径,问题通常出现在生成链接的环节,而不是文件本身。此时应统一模板和配置中的路径写法,让输出保持一致,再检查是否有外部链接仍指向旧写法。两种条件的分界点只有一个:文件系统对大小写的处理方式,以及路径由谁生成。
多个角色对同一事实理解不同时,先做一份路径对照表,而不是争论谁对。表里至少包含三列:请求 URL 的路径、服务器上实际文件路径、两者是否逐字符一致。把这份表交给开发、运维和内容编辑分别确认,分歧就会从“我觉得没问题”变成“这一行不一致”。
实施动作可以这样安排:先抓取站内链接,提取所有路径,按大小写分组;再用脚本或人工抽查请求这些路径,记录返回状态码。结果中路径一致但返回 404 的,属于文件缺失;路径不一致但返回 200 的,说明服务器做了不区分大小写处理,问题被掩盖,迁移环境后可能暴露。这个结果直接决定下一步是补文件、改链接,还是加重定向。
假设某站点从 Windows 环境迁移到 Linux 环境,模板里写的是 /Images/Banner.jpg,而服务器上实际文件是 /images/banner.jpg。迁移前一切正常,迁移后这批图片全部 404。这个例子只用于说明比较方法:把请求路径和实际路径逐字符比对,差异会集中在大小写上,而不是分散在目录层级或文件名拼写上。
处理时有两种成立的选择。若外部引用少、文件可改,可以把文件重命名为与链接一致,并统一模板输出。若外部引用多、文件不宜动,应保留实际文件,用重定向把旧路径指向新路径,并同步修正站内模板。选择依据是外部引用规模和改动成本,不是哪种做法更“标准”。
有些服务器或 CDN 会对路径做规范化处理,让大小写不一致的请求也能返回内容。这种情况下抓取工具可能显示正常,但直接请求原始路径仍可能失败。因此不能只看页面能否打开,要单独请求路径本身并记录状态码。
另外,robots.txt 的抓取限制不等于可靠的索引移除,站点地图也不保证收录。路径统一后,旧路径若已被外部引用,仍应保留重定向,而不是直接删除文件。重定向的目标必须是实际存在的路径,否则只是把 404 从一个地址换到另一个地址。
完成以上核对后,再决定是修改文件名还是保留重定向,并把结论写进项目文档,避免下次迁移时重复出现同一类大小写死链。