站点迁移与换域名
梳理 WordPress 与子比主题迁移、换域名、数据库序列化替换、附件 URL、回调域名、缓存和验收流程。
站点迁移和换域名不是只改 DNS。WordPress 的站点地址、数据库里的历史 URL、媒体附件、主题设置、页面模块、小工具、支付回调、第三方登录、验证码平台、CDN 和缓存都可能保留旧域名。
子比主题功能链路多,迁移后要重点验证登录、用户中心、商城、支付、论坛、投稿、图片灯箱、消息通知和移动端入口。只看首页能打开,不能说明迁移完成。
迁移前清单
迁移前先备份:
| 内容 | 说明 |
|---|---|
| 数据库 | 文章、用户、评论、订单、设置、主题配置、模块配置都在数据库里 |
wp-content/uploads | 媒体库、头像、附件、支付证书、二维码、商品图片 |
| 主题和插件 | 主主题、子主题、站点插件、自定义扩展 |
wp-config.php | 数据库连接、缓存常量、Redis 配置、调试配置 |
| Web 配置 | Nginx/Apache/OpenLiteSpeed 站点配置和伪静态 |
| SSL 证书 | 旧证书、证书申请方式和强制 HTTPS 规则 |
数据库备份和文件备份要来自同一个时间点。商城、支付和用户中心活跃的站点迁移时,建议先进入维护状态,避免迁移过程中继续产生订单、评论、余额变更和用户资料更新。
正确顺序
推荐顺序:
- 备份数据库和文件。
- 在新服务器恢复文件和数据库。
- 修改
wp-config.php数据库连接。 - 绑定新域名或临时调试域名。
- 更新 WordPress
siteurl和home。 - 做数据库 URL 替换。
- 保存固定链接。
- 重新签发 SSL 证书。
- 清理对象缓存、页面缓存、OPcache 和 CDN。
- 按验收清单测试子比主题功能。
DNS 解析和站点绑定见 域名解析与站点访问。固定链接和 CDN 排除见 伪静态、缓存与 CDN。
数据库连接
迁移后数据库连接错误,先检查 wp-config.php:
define('DB_NAME', 'wordpress');
define('DB_USER', 'wordpress');
define('DB_PASSWORD', 'password');
define('DB_HOST', '127.0.0.1');常见问题:
| 现象 | 检查 |
|---|---|
| Error establishing a database connection | 数据库名、用户名、密码、主机 |
| 后台能进但数据不对 | 导入到了另一个数据库,或表前缀不一致 |
| 中文乱码 | 数据库字符集、导入方式、备份编码 |
| 部分订单或用户缺失 | 备份时间点不一致,迁移时站点仍在写入 |
如果新旧服务器数据库版本差异很大,先在测试环境导入验证。不要直接在生产环境第一次尝试大库迁移。
更新站点地址
WordPress 有两个关键地址:
| 配置 | 说明 |
|---|---|
siteurl | WordPress 核心地址 |
home | 站点前台地址 |
可以在后台 设置 -> 常规 修改,也可以用 WP-CLI:
wp option update home 'https://new.example.com'
wp option update siteurl 'https://new.example.com'如果后台进不去,可以临时在 wp-config.php 加:
define('WP_HOME', 'https://new.example.com');
define('WP_SITEURL', 'https://new.example.com');这只适合临时救急。长期配置还是建议写回数据库,避免后台显示和实际访问混乱。
序列化替换
WordPress 很多配置存在序列化数组里。子比主题的主题设置、页面模块、小工具、文章 meta、商城配置、支付配置也可能是数组结构。不要用普通文本编辑器直接替换 SQL 文件里的 URL,因为序列化字符串长度会被破坏。
推荐使用 WP-CLI:
wp search-replace 'https://old.example.com' 'https://new.example.com' --all-tables --precise --recurse-objects --skip-columns=guid --dry-run
wp search-replace 'https://old.example.com' 'https://new.example.com' --all-tables --precise --recurse-objects --skip-columns=guid先跑 --dry-run 看命中数量,再真正执行。--skip-columns=guid 是常见做法,避免修改历史文章的 GUID。若站点业务要求统一 GUID,要先确认订阅、同步和外部引用影响。
同时检查这些形式:
http://old.example.com
https://old.example.com
//old.example.com
old.example.com
www.old.example.com如果从 HTTP 切到 HTTPS,也要替换旧协议图片和静态资源,否则会出现混合内容。
子比主题重点数据
换域名后重点检查这些位置:
| 数据 | 风险 |
|---|---|
| Logo、背景图、默认图 | 主题设置里仍是旧域名 |
| 页面模块和小工具 | 图片、链接、按钮、广告仍指旧站 |
| 文章正文 | 图片、附件、短代码参数仍是旧 URL |
| 头像、封面、认证资料 | 用户 meta 或附件 URL 仍指旧站 |
| 商城商品图和自动发货内容 | 商品详情、发货内容、下载链接错误 |
| Zibpay 支付证书和二维码 | 附件 ID 还在,但物理文件未迁移 |
| OAuth 绑定信息 | 回调域名变更后第三方登录失败 |
| 分享海报和微信分享 | 图片跨域、JS-SDK 域名、缓存旧图 |
如果附件 ID 存在但文件没迁移,数据库替换没有意义。必须确认 wp-content/uploads 中真实文件存在。
外部平台同步
换域名后要同步外部平台:
| 平台 | 检查 |
|---|---|
| 支付平台 | 支付回调、同步跳转、证书、授权域名 |
| 第三方登录 | OAuth 回调地址、应用域名、白名单 |
| 短信或验证码 | 域名白名单、回调地址、前端来源 |
| 邮件 | 邮件模板链接、发件域名、SPF/DKIM |
| 微信公众号 | JS 安全域名、网页授权域名、模板消息链接 |
| CDN | 源站域名、回源协议、缓存规则、证书 |
| 搜索平台 | 站点验证、sitemap、百度提交、canonical |
支付回调尤其重要。订单付款成功但站内状态不更新时,先看支付平台是否仍在请求旧域名。
固定链接和伪静态
迁移后一定要重新保存固定链接:
- 进入
设置 -> 固定链接。 - 不改也点击保存。
- 清理缓存。
- 测试文章页、分类页、用户中心、商城商品页、论坛页。
Nginx 常见规则:
location / {
try_files $uri $uri/ /index.php?$args;
}如果首页能打开但内页 404,多半是固定链接或伪静态问题,不是 DNS 问题。
HTTPS 切换
从 HTTP 切到 HTTPS 时,要同时处理:
| 项目 | 说明 |
|---|---|
| SSL 证书 | 覆盖主域名和 www |
| WordPress 地址 | home 和 siteurl 使用 HTTPS |
| 数据库 URL | 图片、附件、模块链接替换为 HTTPS |
| 强制跳转 | Nginx/面板/CDN/插件只保留一处主规则 |
| CDN 回源 | 回源协议和源站证书一致 |
| 第三方回调 | 支付、OAuth、验证码后台同步 HTTPS |
混合内容常见于正文图片、背景图、广告图、用户头像和自定义 HTML。浏览器控制台会直接指出哪些资源仍是 HTTP。
缓存和 OPcache
迁移后按顺序清理:
- WordPress 缓存插件。
- Redis 对象缓存。
- OPcache 或重启 PHP-FPM。
- Nginx/OpenLiteSpeed 页面缓存。
- CDN 缓存。
- 浏览器缓存。
Redis 和 OPcache 的边界见 Redis 与 OPcache 性能优化。如果数据库已经替换成功但页面仍显示旧域名,多数是页面缓存、对象缓存或 CDN 没清干净。
验收清单
迁移完成后至少测试:
| 功能 | 检查点 |
|---|---|
| 首页和文章页 | 图片、样式、链接、canonical |
| 登录注册 | 登录态、验证码、找回密码、跳转地址 |
| 用户中心 | 头像、封面、余额、积分、消息、设置 |
| 投稿和媒体 | 上传、缩略图、附件、图片灯箱 |
| 商城 | 商品页、购物车、下单、支付、订单状态 |
| 支付回调 | 平台回调能到达新域名,订单能更新 |
| 论坛 | 板块页、帖子页、发帖、评论、排序 |
| 第三方登录 | 回调地址、绑定状态、扫码或跳转 |
| 邮件通知 | 邮件里的链接是否是新域名 |
| 移动端 | 菜单、底部 Tabbar、弹窗、支付按钮 |
如果站点有会员、付费下载、自动发货、分佣提现等业务,迁移后要用小额真实流程或测试环境完整跑一遍。
回滚策略
迁移前要保留回滚方案:
| 场景 | 回滚方式 |
|---|---|
| 新站数据库导入失败 | 恢复旧站维护前数据库 |
| 替换 URL 出错 | 恢复替换前数据库备份 |
| 新域名解析异常 | 临时切回旧 DNS 或旧服务器 |
| 新服务器环境异常 | 旧站保持只读或短期继续服务 |
| 支付回调异常 | 暂停支付入口,避免产生异常订单 |
不要在没有备份的情况下直接对生产数据库做全表替换。任何批量替换前都先导出数据库,并记录旧域名、新域名、执行命令和执行时间。
开发边界
- 不用普通文本替换 SQL 文件里的域名,避免破坏序列化数据。
- 不只改
home、siteurl,还要替换正文、附件、主题设置、小工具和模块里的 URL。 - 不只验证首页,必须验证登录、支付、用户中心、商城、论坛和 Ajax。
- 支付、OAuth、验证码、微信、短信、CDN、搜索平台都要同步新域名。
- 附件 ID 和 URL 不等于物理文件存在,迁移后要检查
uploads。 - 批量替换前先
--dry-run,替换后立即备份一份新数据库。
本页吸收了子比官网换域名、批量替换网站链接 URL 类公开教程,并结合 WordPress、子比主题动态页面、Zibpay 支付、OAuth、媒体附件、Redis/OPcache 和 CDN 迁移排查整理。