搜索全站
安装部署 9 分钟阅读

WordPress 地址与站点地址的区别:改错导致后台进不去的修复方法

"WordPress 地址"和"站点地址"填错一个,前台后台立刻打不开。本文讲清两个字段的真实含义与生效位置、换域名的四种改法(后台/wp-config/数据库/WP-CLI),以及改完进不去后台的三种自救方案。

U
UFO_PF 2025-08-26 · 阅读 9 分钟
Wo 安装部署
阅读提示
本文约 3,370 字,预计阅读 9 分钟。文中命令与配置均经过实测,可直接参考执行。

引言:改了一个框,全站打不开

设置 → 常规里有两个看起来几乎一样的输入框:

  • WordPress 地址(URL):siteurl
  • 站点地址(URL):home

很多人以为”两个填一样就行”,于是换域名时两个都改了,或者只改了一个,然后发现:前台能开后台跳转死循环,或者后台能开前台全 404,或者干脆两边都打不开。

这个操作没有”确认”二次提示,一点保存就立刻生效,是全 WordPress 最容易一键搞挂站点的设置项之一。

原理分析:两个字段各管什么

记住一句话就够:

  • siteurl(WordPress 地址) = WordPress 核心文件所在目录的 URL。它决定后台管理面板、wp-admin、wp-includes、脚本资源从哪加载。
  • home(站点地址) = 访客访问的首页 URL。它决定前台所有链接、canonical、RSS、sitemap 的域名。

两者默认相同。它们不同的典型场景只有两种:

  1. WordPress 装在子目录,但希望访客从根目录访问(官方叫 “Giving WordPress Its Own Directory”)。比如核心在 /wp/,siteurl = https://example.com/wp,home = https://example.com。
  2. 前后端分离 / 管理后台独立域名。home 指向前端站点,siteurl 指向后台所在域名。

除了这两种,绝大多数站点两个必须填一样。填不一样的后果是:后台登录跳转时会从 siteurl 跳到 home,跨域跳转把登录 cookie 丢了,于是无限重定向回登录页——这就是”登录循环”最常见的成因之一。

这两个值都存在 wp_options 表:

SELECT option_name, option_value
FROM wp_options
WHERE option_name IN ('siteurl','home');

保姆级实操

场景一:正常更换域名(后台还能进)

直接改 设置 → 常规 里的两个框 → 保存。但只改这两个还不够,数据库里还有大量旧域名的绝对 URL:文章正文里的图片、Gutenberg 的区块属性、主题的 options、菜单里的自定义链接。

必须再跑一次全库替换(Gutenberg 会把 URL 存进序列化 JSON,手工改必坏):

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

--precise 强制走 PHP 序列化安全替换;--skip-columns=guid 保护 RSS 的全局 ID。

改完清缓存并刷新重写规则:

wp rewrite flush
wp cache flush

场景二:已经进不去后台了(三种自救)

方法 A:改 wp-config.php(最快,推荐)

在 wp-config.php 里 /* That's all */ 之前加:

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

这两个常量会覆盖数据库里的值,网站立刻恢复可访问。之后去后台设置页确认(此时设置页的两个框会变灰不可编辑,这是正常现象)。

用完如果想让后台可编辑,把这两行注释掉即可恢复数据库控制。

方法 B:改数据库

UPDATE wp_options SET option_value = 'https://new.com'
WHERE option_name IN ('siteurl','home');

注意表前缀,多站点是 wp_2_options。

方法 C:用 WP-CLI(需要 SSH)

wp option update home 'https://new.com'
wp option update siteurl 'https://new.com'
wp option get home

场景三:WordPress 装子目录,前台用根目录

  1. 后台 设置 → 常规:WordPress 地址填 https://example.com/wp,站点地址填 https://example.com。
  2. 把根目录下 index.php 改一行:
require( __DIR__ . '/wp/wp-blog-header.php' );
  1. 把 wp/ 里的 .htaccess 复制到根目录(Apache),Nginx 无需此步。
  2. 保存固定链接设置刷新规则。

场景四:HTTP 改 HTTPS 后地址没跟着变

只装了 SSL 证书但后台地址还是 http://,会导致浏览器拦混合内容、后台样式加载失败:

wp search-replace 'http://example.com' 'https://example.com' --all-tables --precise
wp option update home 'https://example.com'
wp option update siteurl 'https://example.com'

再在 wp-config.php 里强制后台走 HTTPS:

define( 'FORCE_SSL_ADMIN', true );

如果在反向代理/CDN 后面,还要补上:

if ( isset( $_SERVER['HTTP_X_FORWARDED_PROTO'] ) && 'https' === $_SERVER['HTTP_X_FORWARDED_PROTO'] ) {
    $_SERVER['HTTPS'] = 'on';
}

否则 WordPress 会误判协议,产生无限跳转。

常见踩坑与失败案例

  1. 案例一:换域名只改了设置页两个框,没跑 search-replace,前台文章里的图片全是旧域名 404。后台编辑文章时图片还能显示(因为用的是相对缓存),前台全裂,非常隐蔽。
  2. 案例二:把 siteurl 改成了带 /index.php 或末尾多了 / 的地址,后台资源 404,登录页只剩裸 HTML。要保持格式干净:https://example.com,不带尾斜杠。
  3. wp-config.php 常量”改不了”:加了 WP_HOME 后后台设置页变灰,很多人以为坏了。这是 WordPress 的预期行为,删掉常量就能编辑。
  4. 反向代理 + 强制 HTTPS 导致登录循环:尤其是套了 Cloudflare 但 SSL 模式设成 “Flexible” 的情况,源站看到的是 HTTP,WordPress 强制跳 HTTPS,Cloudflare 又用 HTTP 回源,两头互相跳。解决:Cloudflare SSL 模式改成 “Full (strict)”,源站装真实证书。
  5. 多站点:home/siteurl 在 wp_options(主站)和 wp_2_options(子站)各有一份,还有 wp_blogs 表的 domain 字段和 wp_site 表。改域名要三处一起改,只改一处子站全部 404。
  6. 改完 sitemap 报错:Yoast/RankMath 的 sitemap 用了缓存的 home 值,跑一次 wp cache flush 并重新保存固定链接。

总结

一句话区分:siteurl 管后台和核心文件路径,home 管前台访客看到的地址,除子目录安装外两者必须一致。换域名的标准动作是”改两个 option + 全库 search-replace + rewrite flush“。万一改错了进不去后台,最快的自救是往 wp-config.php 里塞 WP_HOME/WP_SITEURL 两个常量——它优先级高于数据库,能立刻把站点救回来。另外换域名后别忘了去百度站长平台和 Google Search Console 提交改版规则,否则收录会有一段空窗期。

U
UFO_PF作者

专注 WordPress 生态的实战作者,内容以「可复制、可验证」为第一原则。

留下你的想法

邮箱地址不会被公开。带 * 的为必填项。