直接回答:先判断新主机文件系统是否区分大小写,再把“代码里写死的路径”和“数据库里存下的路径”分开处理——前者改代码或加映射层,后者做一次性批量替换,最后用一条固定规则约束后续上传与部署。假设你从一台不区分大小写的Linux主机迁到另一台区分大小写的Linux主机,迁移前一切正常,迁移后部分图片、CSS或插件资源404,这个前提成立时,下面这套判断才适用。
路径大小写问题不会凭空出现,它通常由迁移前后的文件系统行为差异触发。你需要先拿到一个可区分的原因证据,而不是凭404数量猜测。
Logo.png和logo.png指向同一个文件;在区分大小写的文件系统上,它们是两个不同文件。一个实际动作:在服务器上对报错路径做一次精确查找,比如用find按文件名匹配,确认磁盘上真实存在的文件名与代码请求的文件名是否只差大小写。这一步的结果决定下一步方向——只差大小写才进入映射统一;文件名完全对不上,应先回到文件完整性排查。
这是决定修复方式的关键分叉。两类路径的处理手段不同,混在一起改容易漏改或改错。
主题模板、插件PHP、CSS里的url()引用,往往把文件名写死。这类路径的修复优先级是:改源头 > 加映射层。改源头指直接修正大小写,让它与磁盘真实文件名一致;加映射层指在Web服务器层做重写规则,把请求统一映射到真实文件。前者长期干净,后者适合无法改动第三方插件代码的情况。
文章正文、自定义字段、序列化选项中可能保存了带大小写的URL或文件路径。迁移后这些记录不会自动跟着磁盘文件名变。这类路径适合做一次性、有备份的批量替换,替换前先导出相关表,替换后逐条抽查。
一个注明假设的短例子:假设某插件在数据库里存了/uploads/2024/Photo.jpg,而磁盘上是photo.jpg。只改代码不改数据库,前台调用旧记录时依旧404;只改数据库不改代码,模板里写死的引用依旧404。两类都动,问题才收敛。
两种做法都成立,但适用条件不同,需要按你的可控范围来选。
需要提醒:映射层是补偿手段,不是根治。如果后续继续在不区分大小写的本地环境开发、再部署到区分大小写的服务器,问题会反复出现。因此无论选哪种,都应补一条部署前的路径检查动作。
一次性修完不等于以后不再出问题。真正减少复发的是把大小写规则写进流程,而不是每次出事后临时排查。
关于排查手段的边界要说清:用robots.txt限制抓取并不等于把已收录页面移除,站点地图提交也不保证收录,这些和路径大小写修复是不同层面的事,不要用它们替代真正的路径一致性检查。修复后若仍有个别资源异常,应回到“文件名是否真实存在”这一步重新确认,而不是默认映射已经生效。
如果改源头后仍有大量第三方组件的路径无法触碰,就应转为加映射层,并把映射规则纳入服务器配置版本管理;如果映射层已经加上但新部署仍不断产生新的大小写不一致,说明问题出在开发与部署环节,应优先统一命名约定和部署检查,而不是继续叠加映射规则。判断依据始终是:磁盘真实文件名、代码引用、数据库记录三者是否一致,以及你能否控制产生这些引用的源头。