WordPress换域名后台跳转登不上,三种改法和迁移避坑细节

WordPress换域名后台跳转登不上,三种改法和迁移避坑细节
张文保 更新 27 分钟阅读 7,430 阅读
本文目录
  1. 为什么换域名后后台会跳转
  2. 方法一:直接改 wp_options 表的 siteurl 与 home
  3. 方法二:用 SQL 命令批量替换全数据库
  4. 特殊情况一:序列化数据无法直接 REPLACE
  5. 特殊情况二:含老域名的不止一种形式
  6. 方法三:在 wp-config.php 里硬编码覆盖
  7. 三种方法的应用场景对比
  8. 换域名时容易被忽略的 9 个细节
  9. SEO 权重转移的实测数据
  10. 迁移过程中要做的备份与回滚预案
  11. 多站点 WordPress(Multisite)换域名
  12. 国内换域名绕不开的备案、解析与缓存三道坎
  13. 一次“只改数据库没管备案”的换域名翻车复盘
  14. 常见问题解答
  15. 方法二的 SQL 命令在 phpMyAdmin 里运行报错怎么办?
  16. 用 WP-CLI 命令行报错说找不到 wp 命令怎么办?
  17. 换域名后老链接的 SEO 权重会丢吗?
  18. 子域名的资源(比如 cdn.old.com)也要替换吗?
  19. 插件激活信息和许可证里的域名要不要改?
  20. 方法二跑完后还有部分页面跳老域名怎么办?
  21. 能不能不换域名只换服务器 IP?
  22. 写在最后
  23. 权威参考资料
摘要:WordPress换完域名进不去后台,根子在siteurl和home两个字段。本文从原理讲起,给三种解法——phpMyAdmin直接改wp_options、用SQL批量替换全库并处理序列化数据、在wp-config.php里硬编码常量覆盖,再讲换域名容易被忽略的九个细节、SEO权重转移实测、备份与回滚预案和多站点换域名。

保哥这两年帮人迁过的 WordPress 站点不下三十个,每一次只要换域名,就一定会有一个用户来问同一个问题:"我新域名能打开首页,但点登录就跳回老域名,根本进不去后台,怎么办?" 网上能搜到的攻略基本都是一句"改 wp_options 表就行",但实际操作起来要踩的坑远不止改一行 SQL 那么简单。本文把我在自家站点和朋友站点上反复跑过的三种方法、每种方法的应用场景、以及迁移时附带要处理的图片路径、邮件签名、Cookie 域、CDN 缓存、SSL 证书等所有相关问题写清楚。读完应该可以一次性把 WordPress 换域名问题解决干净。

为什么换域名后后台会跳转

WordPress 在数据库里存了两个跟域名有关的核心选项,藏在 wp_options 表里:

  • siteurl —— 这是 WordPress 自己用的安装地址,决定了 wp-admin 的入口、主题样式表 URL、后台资源的加载源。
  • home —— 这是站点对外展示的地址,决定了首页、文章、归档页的链接前缀。

当你把站点文件搬到新服务器、改了域名解析、用新域名访问 wp-login.php 时,WordPress 看到 URL 是新域名,但读数据库发现 siteurl 仍然是老域名,就会做一次"安全跳转"——把你跳到 siteurl 指向的地址。这就是后台始终跳到老域名的根因。

同样的逻辑也解释了几个相关现象:换域名后首页能开但样式丢了(CSS URL 还是老域名)、文章里图片 404(图片绝对路径写死了老域名)、提交评论或登录时 Cookie 写不进去(Cookie 域跟当前域名不匹配)。这些问题本质上都是一类:数据库里的旧域名残留没有清理干净。

下面三种方法按从简单到复杂排开,你按自己的能力选一种。

方法一:直接改 wp_options 表的 siteurl 与 home

这是最朴素的做法,适合刚迁移完、数据库里其他地方还没怎么写过老域名的站点。

  1. 登录服务器或托管面板的 phpMyAdmin。如果用宝塔面板,左侧"数据库" → 选你的 WP 数据库 → 点"管理"进入 phpMyAdmin。
  2. 左侧表列表找 wp_options,进入后顶部按"option_name"列排序,或在搜索框里搜 siteurl
  3. 双击 siteurl 那一行的 option_value 字段,把老域名改成新域名,回车确认。
  4. 同样的操作处理 home 行。
  5. 清空浏览器 cookie,访问新域名的 /wp-login.php,应该能正常登录。

注意几个容易踩的细节:

  • 新域名要写完整带 https:// 协议头,不要写成 //example.com 或者只写 example.com。
  • 末尾不要带斜线 /,写 https://www.new.com 而不是 https://www.new.com/。带斜线会让某些插件的 URL 拼接出现双斜线。
  • 如果你站点没装 SSL,写 http:// 也行,但建议趁迁移把 SSL 一起装上,国内国外搜索引擎都已经把 https 当作排名因子。

方法一的缺点是只改了两个核心字段,文章正文里写死的图片绝对路径、菜单项里的页面链接、widget 里的 URL 都没动。如果你站点里图片不多、菜单都是页面 ID 引用而不是绝对 URL、widget 没有自定义 HTML,方法一够用了。否则继续看方法二。

方法二:用 SQL 命令批量替换全数据库

这是迁移老站点最常用的方案。一条 SQL 把所有跟老域名相关的字段一次性换掉。phpMyAdmin 顶部"SQL"标签里粘贴下面命令,依次执行:

-- 1. 改 wp_options 的 siteurl 和 home
UPDATE wp_options SET option_value = REPLACE(option_value, 'https://www.old.com', 'https://www.new.com')
WHERE option_name IN ('siteurl', 'home');

-- 2. 改文章正文里的旧域名引用(图片、附件、自定义链接)
UPDATE wp_posts SET post_content = REPLACE(post_content, 'https://www.old.com', 'https://www.new.com');

-- 3. 改文章 GUID(注意:GUID 严格意义上不应该改,但实际很多插件会读它做 URL)
UPDATE wp_posts SET guid = REPLACE(guid, 'https://www.old.com', 'https://www.new.com');

-- 4. 改 postmeta 表里的元数据(部分主题/插件会把 URL 存这里)
UPDATE wp_postmeta SET meta_value = REPLACE(meta_value, 'https://www.old.com', 'https://www.new.com');

-- 5. 改 commentmeta 表(评论里的链接)
UPDATE wp_comments SET comment_content = REPLACE(comment_content, 'https://www.old.com', 'https://www.new.com');
UPDATE wp_comments SET comment_author_url = REPLACE(comment_author_url, 'https://www.old.com', 'https://www.new.com');

-- 6. 改 termmeta(分类与标签的元数据)
UPDATE wp_termmeta SET meta_value = REPLACE(meta_value, 'https://www.old.com', 'https://www.new.com');

这套命令几乎覆盖所有正常情况下会出现 URL 的位置。但还有两个特殊情况要单独处理。

特殊情况一:序列化数据无法直接 REPLACE

WordPress 里很多 widget、主题选项、插件设置存在 wp_options 的 option_value 里时,是 PHP 序列化后的字符串,长这样:a:2:{s:5:"title";s:10:"老网站名";s:3:"url";s:24:"https://www.old.com/img";}。注意 s:24 是字符串长度。如果你直接 REPLACE 把 https://www.old.com 换成 https://www.new.com,长度从 24 变成 24(碰巧相同)就没事,但如果新域名比老域名长(比如老的是 old.cn,新的是 www.newdomain.com),s:24 这个长度数字没跟着改,整个序列化字符串会损坏,反序列化时报错。

处理办法两种:

  1. 用专门的工具走全库替换。WP-CLI 有 wp search-replace 命令,自动处理序列化数据:
    wp search-replace 'https://www.old.com' 'https://www.new.com' --all-tables --skip-columns=guid

    跑完之后所有序列化字段会被正确重写。
  2. 用 Better Search Replace 这个 WP 插件。后台装好后在"工具 → Better Search Replace"里输入新旧域名,勾选所有表,先勾"模拟运行"看效果,确认没问题再去掉模拟跑实际替换。

保哥强烈推荐 WP-CLI 那条命令,比手敲 SQL 安全很多,而且处理速度也快。不会用 WP-CLI 的就用 Better Search Replace 插件,效果一样。

特殊情况二:含老域名的不止一种形式

老站点的数据库里可能同时存在 http://www.old.comhttps://www.old.comhttp://old.com//old.com 几种写法。一条 REPLACE 只能替换一种。建议把所有可能的形式都跑一遍:

wp search-replace 'http://www.old.com' 'https://www.new.com' --all-tables --skip-columns=guid
wp search-replace 'https://www.old.com' 'https://www.new.com' --all-tables --skip-columns=guid
wp search-replace 'http://old.com' 'https://www.new.com' --all-tables --skip-columns=guid
wp search-replace 'https://old.com' 'https://www.new.com' --all-tables --skip-columns=guid
wp search-replace '//old.com' '//www.new.com' --all-tables --skip-columns=guid

跑完之后用 wp db search 'old.com' 全库搜一次,确认没有任何残留。这一步很重要,否则总会有边边角角的 URL 漏掉。

方法三:在 wp-config.php 里硬编码覆盖

这是应急方案,适合"我连数据库都打不开"的极端情况。在网站根目录的 wp-config.php 文件最顶部(紧跟 <?php 之后)加两行:

define('WP_HOME', 'https://www.new.com');
define('WP_SITEURL', 'https://www.new.com');

这两行的优先级高于数据库里的 siteurl 和 home,WordPress 会优先用这里的值。保存上传之后立刻就能登录后台。

但要注意:

  • 这是临时方案。后台保存设置时 WordPress 会跳过 siteurl 和 home 的写入(因为定义了常量),数据库里的老值依然存在,万一这两行被你或别的开发者无意中删了,又会跳回老域名。
  • 方法三只解决登录跳转问题,文章里图片、widget 里 URL 都没改。所以方法三是"先进后台",进去之后你还得跑一遍方法二。
  • 不推荐长期用这个方案。最终一定要把数据库里的值也修正。

三种方法的应用场景对比

方法适用场景优点缺点
一·改 options 表全新站点、内容很少最快只改两个字段
二·SQL 全库替换大部分迁移场景覆盖全面需注意序列化
三·wp-config 硬编码数据库不通的应急立刻生效非永久解决

实战中最佳组合是先用方法三救火让自己能登后台,再用方法二(WP-CLI 或 Better Search Replace)做完整替换,最后把方法三的两行常量删掉。这样既快又干净。

换域名时容易被忽略的 9 个细节

除了上面三种核心方法,换域名还有一堆周边问题,每一个不处理都可能导致用户体验或 SEO 受影响:

  1. 301 重定向老域名到新域名。在老域名的 nginx 或 Apache 配置里加一条 return 301 https://www.new.com$request_uri;,让搜索引擎和老链接的访客自动跳新域名。这是 SEO 权重转移的关键。
  2. 提交搜索引擎。Google Search Console 走"地址变更"工具,百度搜索资源平台用"网站改版"功能,向搜索引擎正式声明域名迁移。
  3. 更新 sitemap.xml。重新生成一遍 sitemap,里面所有 URL 都是新域名,并到 GSC 和百度提交。
  4. 更新 robots.txt。如果 robots.txt 里有 sitemap 路径或者具体 URL,全部换成新域名。
  5. 更新 SSL 证书。新域名要单独签发或换名 SAN 证书。Let's Encrypt 免费证书走 acme.sh 一条命令搞定。
  6. 清 CDN 缓存。Cloudflare、阿里云 CDN、腾讯云 CDN 后台都做一次"全部刷新",避免边缘节点缓存还指向老域名。
  7. 改外链。社交媒体(微博、微信公众号、知乎)账号简介里的链接、合作伙伴的友情链接、自己开过的 GitHub 仓库 README 里的演示链接,全部找一遍换新域名。
  8. 更新邮件 SMTP 配置。如果 WordPress 配了发件邮箱(找回密码、订阅通知)用的 from 域名是老域名,要在 WP Mail SMTP 之类的插件里改成新域名,否则邮件被反垃圾系统标记。
  9. 检查 wp-content/uploads 路径。少数情况下 WordPress 会把 uploads 路径写死成绝对地址。检查 wp_options 里的 upload_url_path 字段,为空才是默认行为,有值就改成新域名对应路径。

这九条全部做完,才能算"完整的换域名"。我自己迁站会按这个清单逐项打勾。

SEO 权重转移的实测数据

很多人最关心换域名会不会丢权重。保哥手上有一个 2023 年从 zwbao.com 迁到 zhangwenbao.com 的真实案例,做完上面九条之后的数据:

  • 第 1 周:百度收录从 1.2 万跌到 8 千,谷歌从 8 千跌到 6 千。这是正常的"迁移阵痛期"。
  • 第 2~4 周:百度收录回到 1 万,谷歌回到 7.5 千。
  • 第 8 周:百度 1.3 万、谷歌 8.5 千,基本超过迁移前。
  • 第 12 周:百度 1.5 万、谷歌 1.1 万,长期稳定增长。

结论:只要 301 重定向到位、Search Console 改版工具用对,权重在 8~12 周内能完全转移过来。如果跑了 3 个月还在原地不动,多半是 301 没配好或者 sitemap 没更新。

迁移过程中要做的备份与回滚预案

换域名前一定先做完整备份。我自己的 SOP 是这样的:

  1. 整站文件 tar 打包tar czf wp_full_$(date +%F).tar.gz /www/wwwroot/old.com/,包括 wp-content、wp-config.php、.htaccess 等所有文件。
  2. 数据库 mysqldump 全量导出mysqldump -uxxx -p wpdb > wpdb_$(date +%F).sql
  3. SSL 证书备份:旧域名的 fullchain.pem 和 privkey.pem 复制一份到本地,万一新证书签发失败可以临时回切。
  4. DNS 记录截图:旧域名的 A、MX、TXT、CNAME 记录全部截图存档,避免改 DNS 后忘了原来什么记录。

有了这四件,万一迁移中途出问题,回滚就是文件还原 + 数据库导回 + DNS 切回,最快 30 分钟回到迁移前状态。我经手的三十多次迁移有两次中途出问题,靠这套预案救了回来。

多站点 WordPress(Multisite)换域名

如果你跑的是 WordPress 多站点(Network),换主域名要单独处理 wp_blogs 和 wp_site 两张表:

-- 改主站点表
UPDATE wp_site SET domain = 'www.new.com' WHERE domain = 'www.old.com';

-- 改子站点表(多站点的每个子站都在这里有一行)
UPDATE wp_blogs SET domain = REPLACE(domain, 'old.com', 'new.com');

-- options 表里每个子站点都有自己的 wp_2_options、wp_3_options 等
-- 用 WP-CLI 批量处理:
-- wp search-replace 'old.com' 'new.com' --network --all-tables

多站点 WP-CLI 必须加 --network 参数才会处理所有子站。少这个参数只会改主站,其他子站还指向老域名。

国内换域名绕不开的备案、解析与缓存三道坎

前面三种方法和九条细节,本质上都在处理“软件层面”的旧域名残留。但保哥发现,真正让国内站点换域名翻车的,往往不是数据库里那几行 SQL,而是国内特有的备案、解析、缓存三道坎。这三道坎一道都绕不过去,而且都得排在改数据库之前考虑。

第一道:备案坎。国内服务器上的网站,工信部 ICP 备案是绑在“域名 + 主体 + 接入商”这个三元组上的。换主域名,等于换了三元组里的域名,新域名如果没接进备案就指向境内 IP,接入商会在 24 到 48 小时内识别到“未备案域名”,直接把 80 和 443 端口阻断,页面根本打不开,这跟 siteurl 跳转完全是两码事。正确顺序是:先去阿里云、腾讯云的备案系统提交“新增网站(原主体)”,拿到新备案号确认通过后再切流量上线;老域名的备案别急着注销,留着继续承载 301 跳转。这里还有个细节,如果新老域名同属一个主体、只是想替换接入域名,走的是“变更备案”而不是“新增网站”,但无论哪种,核验快则 3 天、慢则 20 天,所以它必须排在整个迁移计划的最前面,而不是临到上线才想起来。

第二道:解析坎。国内 DNS 生效严重受运营商 LocalDNS 缓存拖累。你在阿里云、DNSPod 后台把 A 记录改到新服务器,但电信、联通、移动各地的 LocalDNS 并不一定听你设的 TTL,有的会强制缓存 24 到 48 小时。这意味着改完解析的头两天,新老域名是并存的:一部分用户和蜘蛛走新域名,一部分还卡在老域名。所以迁移期老域名的服务器至少要多留 7 天,千万别一改解析就把老站关掉,否则 DNS 还没全球收敛的地区,用户和搜索引擎蜘蛛全都吃 404。保哥的做法是用 dig +trace 配合几个跨运营商的在线检测工具,各地查一遍,确认收敛了再动老站。

第三道:缓存坎。国内 CDN(阿里云、腾讯云、又拍云、七牛)的回源 Host 和缓存 key 经常写死了老域名。换域名后必须进 CDN 控制台改回源配置、刷新并重新预热全部缓存,否则边缘节点吐给用户的还是带老域名的 HTML,数据库改得再干净也白搭。除了 CDN,还有一类容易被忘掉的“国内特供”缓存:微信、QQ 分享用的业务域名、小程序的请求域名、JS 安全域名,全都绑在老域名上。换域名后要去微信公众平台和微信开放平台,把这些白名单逐个改成新域名,否则页面在微信里打不开,或者分享时直接报“不在以下合法域名”的错。这一步在纯技术教程里几乎从不提,却是国内站点换域名后用户投诉最集中的地方。

一次“只改数据库没管备案”的换域名翻车复盘

保哥团队 2024 年接手过一个外贸建站客户,老板急着把又长又拗口的老域名换成一个更短的新域名做品牌升级。开发同学按本文方法二,用 WP-CLI 把全库 REPLACE 得干干净净,新域名在本地和测试机上一切正常,首页、后台、图片路径全对,当天晚上就信心满满地把老站关了。结果第二天一早客服群就炸了:全国大批用户反馈“网站打不开”。

保哥连夜远程排查,发现是两个坑连环爆雷:

  • 新域名压根没做备案。开发只顾着技术迁移,完全没人管备案这件事。新域名指向境内 IP 后,接入商在不到一天里就识别为未备案域名,把 80 端口阻断了。这时候用 GSC 的 URL 检查和百度抓取诊断去看,蜘蛛抓到的全是接入商返回的拦截提示页,而不是网站内容。
  • 老域名关得太早。解析改过去还不到 12 小时,DNS 远没有全球收敛,部分用户的 LocalDNS 还指向已经被关掉的老服务器,等于新域名被备案卡住、老域名又被人为关停,新老两头都瘫。

急救方案是:先把老站重新拉起来、恢复老域名解析,让大部分用户至少能正常访问;同时给新域名补提备案,走了加急通道还是等了 5 天;备案通过后才正式把流量切到新域名并配 301。这一通折腾下来,自然搜索流量掉了整整三周才追平迁移前的水平,期间还接到几个老客户“你们网站是不是倒闭了”的电话,对品牌信任的折损比流量本身更难估量。

这次事故被保哥写进了团队的换域名 SOP,核心就一句:换域名的第一步永远是“先把新域名备案办妥、再切解析、老站至少多留两周”,而大家最害怕的数据库 REPLACE,反而是整个流程里最不容易出事、最可控的一环。把精力全压在改库上、却忽略了备案与解析这两件“非技术但卡脖子”的事,才是国内换域名翻车的真正原因。

为了避免重蹈覆辙,保哥还把上线后的核验固化成一张“当天必查”清单:第一,用手机 4G 网络(而不是公司 WiFi)直接访问新域名,确认接入商没在端口层阻断;第二,在站长平台用真实蜘蛛 UA 做一次抓取诊断,看返回的是正版页面还是拦截页;第三,拿一部手机在微信里点开新域名的分享链接,确认不是灰屏;第四,跨电信、联通、移动各查一次解析,确认 A 记录已经收敛到新服务器。这四步十分钟就能跑完,却能在第一时间发现备案、解析、微信这三类“技术教程不教、却最容易让国内站点翻车”的隐患,比等用户投诉再回头救火主动得多。保哥经手三十多次迁站之后越来越确信一件事:换域名这道题,技术分只占一半,另一半全在国内这套备案与监管的“隐形规则”里,谁把这半张卷子也答好了,迁站才算真正稳。

常见问题解答

方法二的 SQL 命令在 phpMyAdmin 里运行报错怎么办?

多半是表前缀没改对。WordPress 默认表前缀是 wp_,但很多人为了安全改成了别的比如 wp123_。命令里所有 wp_ 前缀都要换成你实际的前缀。在 phpMyAdmin 左侧表列表里能看到完整的表名。改完前缀再跑一次。

用 WP-CLI 命令行报错说找不到 wp 命令怎么办?

WP-CLI 不是 WordPress 自带的,需要单独安装。Linux 服务器一条命令安装:curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar && chmod +x wp-cli.phar && mv wp-cli.phar /usr/local/bin/wp。装好后 wp --version 能输出版本号即可。如果你用的是宝塔面板,软件商店里搜 wp-cli 直接安装。

换域名后老链接的 SEO 权重会丢吗?

不会,前提是配好了 301 重定向。Google 和百度都明确说过 301 跳转会传递 95% 以上的 PageRank 权重。但是没做 301 直接弃用老域名,权重会快速衰减,3 个月后基本归零。所以 301 是必做的一步,不能省。

子域名的资源(比如 cdn.old.com)也要替换吗?

要。如果你之前用了 cdn.old.com 来加载图片或静态资源,迁移后这些 URL 还是指向老的 CDN,需要在 WP-CLI 替换命令里多加一条 wp search-replace 'cdn.old.com' 'cdn.new.com'。如果新域名没用 CDN,那就替换成 www.new.com 或省略 CDN 直接用主域名。

插件激活信息和许可证里的域名要不要改?

付费插件如 Elementor Pro、WP Rocket 等的许可证绑定老域名的话,需要在插件官网后台手动解绑老域名再绑定新域名,否则插件会显示"许可证无效"。这个操作不在数据库层面,要去插件官网账户中心做。

方法二跑完后还有部分页面跳老域名怎么办?

检查这几个地方:1)主题自定义模板里有没有写死老域名的硬编码(搜源码 grep "old.com");2).htaccess 文件里有没有 RewriteRule 用了老域名;3)某些 cache 插件的配置文件 wp-content/cache/config.php 是否含老域名字符串。这三处不在数据库里,需要 SSH 到服务器改文件。

能不能不换域名只换服务器 IP?

能。换 IP 不影响域名解析以外的任何 WordPress 配置,只需要在 DNS 后台把 A 记录指到新 IP,等待 DNS 全球生效(一般 24 小时内)即可。期间老 IP 上的服务器最好保留几天,避免少数地区 DNS 缓存还没更新的访客访问失败。

写在最后

WordPress 换域名这件事,看上去就是改两个字段,实际牵扯到从数据库到 CDN 到搜索引擎的全链路。本文给的三种方法本质上是一套组合拳:方法三让你先进得去后台,方法二用 WP-CLI 完整替换数据库,方法一适合事后补漏。再加上九条周边细节和 SEO 转移的实测数据,整个迁站流程就能落地。建议第一次迁站的同学按本文清单一项一项打勾,做完之后开无痕模式从 Google 搜你的旧域名关键词,确认搜索结果点开能正确 301 跳到新域名,这次迁移就成了。

权威参考资料

分享到
标签
版权声明

本文标题:《WordPress换域名后台跳转登不上,三种改法和迁移避坑细节》

本文链接:https://zhangwenbao.com/wordpress-change-domain-access-management-login-jump-solution.html

版权声明:本文原创,转载与引用请注明作者与原文链接。许可协议: CC BY 4.0

继续阅读
1 条评论
  1. 王 的头像
    #1 中国浙江省杭州市西湖区电信

    我修改完后还是不行 访问新域名还是自动跳转老域名

发表评论
分享到微信 或在下方手动填写
支持 Ctrl + Enter 提交