WordPress 换域名后,正文里的图片还挂着旧地址

· wordpress · 阅读 3
摘要

把测试站从 dev.example.com 搬到正式域名,前台页面正常,图片全裂了。F12 一看,src 还是旧域名。 先搞清楚改哪里 WordPress 里同一个 URL 至少存在三个地方:wp_options 的 siteurl 和 h

把测试站从 dev.example.com 搬到正式域名,前台页面正常,图片全裂了。F12 一看,src 还是旧域名。

先搞清楚改哪里

WordPress 里同一个 URL 至少存在三个地方:wp_options 的 siteurl 和 home、文章正文里的硬编码、还有 wp_posts.guid。前两个后台设置页改一下就行,麻烦的是后面两个。

guid 这个东西,官方的说法是「永久标识符」,不是链接。我一开始也以为得一起换,后来发现 RSS 阅读器和某些聚合服务把它当 ID 用,改了反而会出现重复内容。所以我的做法是——不动它。

正文批量替换,用 WP-CLI

wp search-replace 'dev.example.com' 'www.example.com' wp_posts --all-tables-with-prefix --precise --dry-run

先跑 --dry-run 看会改多少行。这个参数很关键,我上次没加,直接改了 3000 多行才想起来没备份。

确认没问题再去掉 --dry-run 跑一遍。--precise 是给 PHP 序列化数据用的,很多主题的选项字段里存的是序列化数组,字符串长度变了不重算,反序列化直接失败。这个坑我在一次没加参数的事故里踩过,页面主体全空,也不报错。

替换完还剩两处

一是 wp_options 里主题和插件的设置。上面那条命令带 --all-tables-with-prefix 其实已经扫到了,但我习惯单独再查一遍,毕竟有些插件把域名拼在 JSON 里。

二是 .htaccess 或者 Nginx 的 server_name,这个跟 WordPress 无关,是服务器配置。忘了改,访问会跳到旧站。

数据库操作之前记得导出。我用的 wp db export backup.sql,三秒钟的事,省得半夜回滚。