本文约 2,710 字,预计阅读 7 分钟。文中命令与配置均经过实测,可直接参考执行。
引言
迁移之后打开新站,首页的代码和内容都在,可整站变得像一张没有样式的「纯文字稿」:导航竖着堆在左上角、字体大小全不对、图片挤成一团、后台也是一片混乱。用浏览器开发者工具(F12)看控制台,会刷出一片红色的 404,都是 wp-content/themes/.../style.css 或 wp-includes/css/... 加载失败。
这不是主题坏了,也不是 CSS 文件没传上去。真相是:主题的 CSS、JS 文件在页面里是以完整网址引用的,WordPress 依据站点地址(siteurl 和 home)来拼这个网址。迁移后这两个值如果还指向旧域名,浏览器就会去旧域名请求样式文件;旧域名要么打不开,要么返回别的页面,样式自然全丢。所以要修的不是 CSS,而是这两个地址。
故障原因分析
siteurl与home未更新。 这是最核心的原因,WordPress 用它们拼接所有静态资源的绝对路径。
- 两者只改了一个。
home控制前台展示,siteurl控制核心文件,任一错误都会导致资源地址错乱。
- 协议不匹配。 站点已启用 HTTPS,配置里却写
http://,浏览器会因混合内容(Mixed Content)拦截部分样式和脚本。
- www 与非 www 不一致。 配置写
newdomain.com,而用户访问www.newdomain.com,跨域请求资源被浏览器安全策略阻挡。
- wp-config.php 里硬编码了旧地址。 用
WP_HOME、WP_SITEURL定义后,数据库设置被覆盖,改数据库无效。
- CDN 或缓存插件仍指向旧域名。 缓存里存放着旧地址生成的静态资源链接。
分步解决方案
方法一:修正数据库中的两个地址(推荐)
进 phpMyAdmin,先查看现状:
SELECT option_id, option_name, option_value FROM wp_options
WHERE option_name IN ('siteurl', 'home');
再把它们改成新域名(协议、www 都要和实际访问方式一致):
UPDATE wp_options SET option_value = 'https://www.newdomain.com' WHERE option_name = 'siteurl';
UPDATE wp_options SET option_value = 'https://www.newdomain.com' WHERE option_name = 'home';
改完清一次浏览器缓存或用无痕窗口访问。若样式恢复,说明判断正确。
判断样式到底丢在哪,可以右键查看网页源代码,找到引用 style.css 的那一行,看它前面的域名是不是旧站。如果是旧域名,就锁定为站点地址配置问题;如果已经是新域名却依然加载失败,那要改查文件是否存在、目录权限是否为 755、以及服务器是否拦截了对 wp-content 目录的访问。把这两种情况区分开,能避免修错方向、白费功夫。
方法二:后台改(能进后台时)
如果你能进后台,直接到「设置 → 常规」,把「WordPress 地址(URL)」和「站点地址(URL)」两项都填成新域名,保存即可。这是最直观的方式。
方法三:处理 HTTPS 混合内容
站点上了 SSL 后,如果页面里还有写死的 http:// 资源,浏览器会拦截。批量把数据库里的 http:// 换成 https://(注意先备份):
-- 只对纯文本字段安全,涉及序列化数据请用 WP-CLI 或插件
UPDATE wp_posts SET post_content = REPLACE(post_content, 'http://old.com', 'https://old.com');
UPDATE wp_postmeta SET meta_value = REPLACE(meta_value, 'http://old.com', 'https://old.com');
更稳妥的做法是用 WP-CLI:
wp search-replace 'http://old.com' 'https://old.com' --all-tables --precise
方法四:清理缓存与检查 CDN
样式改了地址仍不更新,多半是缓存。清空浏览器缓存、站点缓存插件缓存、以及 CDN 缓存;如果站点接了 CDN,到 CDN 控制台刷新一下缓存并确认回源域名正确。
方法五:排查配置文件覆盖
打开 wp-config.php,搜索是否有下面这两行,若有且指向旧域名,改成新域名或删掉:
// 文件路径:网站根目录/wp-config.php
define('WP_HOME', 'https://www.newdomain.com');
define('WP_SITEURL', 'https://www.newdomain.com');
常见踩坑点
- 地址结尾带斜杠。
https://newdomain.com/末尾的斜杠可能造成资源路径拼成双斜杠,规范写法不带结尾斜杠。 - 协议写错。 启用证书却填
http://,会触发混合内容警告,样式依旧加载失败。 - www 前后不一致。 要和域名解析、SSL 证书、站点访问方式保持完全一致。
- 只改数据库不管配置常量。
wp-config.php定义了常量时数据库无效,必须排查配置文件。 - 换地址后不清缓存。 浏览器和 CDN 缓存可能让修复「看起来没生效」,务必清一遍。
- 暴力替换序列化数据。 主题选项里的资源地址涉及序列化,直接 SQL 替换会损坏设置,改用 WP-CLI 或专用插件。
总结
迁移后 CSS 样式丢失、页面错乱,看着吓人,但根源往往就是一个「站点地址 URL 配置错误」。WordPress 靠 siteurl 和 home 拼接所有静态资源地址,只要其中一个还指向旧域名,浏览器就会去错误的地方拉取样式文件而 404。修复的思路很清晰:先在数据库或后台把这两项改成新域名,注意协议和 www 前缀与实际访问一致,涉及 HTTPS 就统一替换 http://,最后清理浏览器、插件和 CDN 缓存。把站点地址 URL 配对之后,迁移后样式丢失这类「颜值崩塌」问题自然迎刃而解,站点又能漂亮地展示了。最后再强调一次:改这两个地址前先备份数据库,改完后务必清空浏览器、插件与 CDN 三层缓存,缺了哪一步都可能让你误以为没修好,白白多排查一轮。
