站点从根目录搬到 /blog 之后,页面背景和图标全裂,样式表本身返回 200,里面引的图片全是 404,请求路径里少了一层目录。乍看像缓存或者权限的锅,追下去往往不是。

.hero {
  background: url('/blog/wp-content/themes/mytheme/images/bg.jpg');
}

追下去是这么回事:CSS 里的相对路径按样式表所在位置解析,不按页面地址解析。主题目录层级一变,../images/bg.png 就指到了别处,浏览器不会替你补这一层。

「CSS 相对路径」这个问题文档写得含糊,实际行为以当前版本为准,别照旧版本的结论套。一次只改一处,改完立刻验证,几个改动叠在一起,出问题就说不清是谁导致的。

先做最小复现,能稳定跑出来的问题,排查成本会低一个数量级。别只看报错的最后一行,往上看几行,真正的起因通常在上面。

具体做法是,在网络面板看 404 的完整 URL 和真实文件位置对一遍;把 CSS 里的图片路径改成从站点根算起的绝对路径;用构建工具时把 publicPath 一起改掉 只改 CSS 下次打包又回去了。

验收就看一点,背景图和图标全部加载出来,站点再换一次目录也不用改样式表。

作者 9823189