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

WordPress启用HTTPS后后台无法登录SSL重定向循环

给 WordPress 开启 HTTPS 后后台陷入重定向循环、无法登录?本文从站点地址、反向代理头、Cloudflare SSL 模式、.htaccess 重写规则四方面给出修复方案,帮你彻底摆脱重定向次数过多、ERR_TOO_MANY_REDIRECTS。

U
UFO_PF 2026-10-10 · 阅读 8 分钟
Wo 安装部署
阅读提示
本文约 2,853 字,预计阅读 8 分钟。文中命令与配置均经过实测,可直接参考执行。

引言

给网站上了 SSL 证书,准备让全站走 HTTPS,一切看起来都很顺利,前台也能用 https:// 打开,可偏偏一到后台登录就出问题:页面不停地转圈,最后浏览器甩出一句”重定向次数过多”,或者 ERR_TOO_MANY_REDIRECTS,登录框更是死活进不去。这个现象叫”重定向循环”,意思是服务器和浏览器之间在”你跳我、我跳你”,谁也不肯停。它多半不是证书本身的问题,而是”谁负责跳转”这件事没说清:数据库里说站点该用 http,服务器又说必须走 https;或者你套了 CDN、反向代理,WordPress 检测不到真实协议,误以为访客还在用 http,于是又跳一次。只要把协议判断这一环理顺,循环立刻就能断开。

故障原因分析

1. siteurl / home 仍是 http。 数据库里记录的是 http 地址,服务器却强制 https,两边反复跳转,这是排查时最该先确认的一点,改起来也最快。

2. 反向代理 / CDN 下 WordPress 检测不到真实协议。 请求到源站时已经是 http,is_ssl() 返回 false,程序或插件认为该跳转到 https,形成死循环,只要把真实协议透传给后端,这类循环往往不治而愈。

3. Cloudflare 使用了 Flexible SSL 模式。 这种模式下浏览器到 CDN 是 https,CDN 回源却是 http,最容易触发重定向循环,很多新手以为开了 Cloudflare 的 SSL 就万事大吉,恰恰是这个模式埋下了坑。

4. .htaccess 里的 http→https 规则与后台冲突。 重写规则写法有误,把已加密的请求又剥回 http,重写规则贵精不贵多,一条干净的跳转往往比一堆规则更可靠。

5. 登录 Cookie 被标记为 secure。 在协议不一致的环境里,Cookie 无法正常写入,导致登录反复失败,协议统一之后,这类问题也会随之消失。

分步解决方案

方法一:把站点地址改为 https

最基础也最必要的一步,进数据库改两条记录:

UPDATE wp_options SET option_value = 'https://www.example.com' WHERE option_name = 'home';
UPDATE wp_options SET option_value = 'https://www.example.com' WHERE option_name = 'siteurl';

或使用 WP-CLI:

wp option update home 'https://www.example.com'
wp option update siteurl 'https://www.example.com'

两条记录分别代表访问地址与站点地址,必须同时改对。

方法二:在 wp-config.php 里告诉 WordPress 真实协议

反向代理 / CDN 环境必须补上这段,让 WordPress 知道访客其实是通过 https 进来的:

// wp-config.php —— 放在 "That's all, stop editing!" 之前
if ( isset( $_SERVER['HTTP_X_FORWARDED_PROTO'] )
     && 'https' === $_SERVER['HTTP_X_FORWARDED_PROTO'] ) {
    $_SERVER['HTTPS'] = 'on';
}

这段判断要放在 wp-config.php 靠前的位置,确保在 WordPress 核心加载之前就生效。

方法三:修正 Cloudflare 的 SSL 模式

如果你在用 Cloudflare,把 SSL/TLS 加密模式从 Flexible 改成 Full 或 Full (strict)。Flexible 是重定向循环的头号元凶,改成 Full 系列后,CDN 回源也走 https,循环通常立刻消失,改完后到 Cloudflare 的 SSL/TLS 页面确认模式已经生效,再清一次缓存。

方法四:检查并简化 .htaccess 重写规则

Apache 环境下,确认强制跳转规则写法正确、没有把 https 请求又跳回 http:

# .htaccess —— 仅当确实需要时才加,且只写一条
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

这段规则只在 Apache 环境有效,Nginx 用户请改用面板或 server 段里的跳转配置。

方法五:清理缓存并验证

# 清空 WordPress 缓存、CDN 缓存与浏览器缓存后再测试

用无痕窗口打开 https://你的域名/wp-admin,确认不再反复跳转。如果浏览器地址栏的锁形图标正常显示、页面也不再闪跳,就说明协议已经彻底对齐;反之可以用在线 SSL 检测工具再看一眼证书与跳转链路。

常见踩坑点

  1. Cloudflare 一直用 Flexible。 这是循环最经典的原因,务必改成 Full 或 Full (strict)。
  2. 只改了首页地址,没同步 siteurl。 home 和 siteurl 两条都要改,缺一不可。
  3. 代理头没透传。 Nginx 未设置 X-Forwarded-Proto 时,后端就判断不出真实协议,需在代理配置里补上。
  4. 混合内容拖后腿。 页面里还引用着 http 的图片、脚本,会影响加载甚至引发异常跳转,需一并改为 https。
  5. 缓存和 Cookie 残留。 改完配置仍循环,先清 CDN、浏览器缓存并删除旧 Cookie 再判断。
  6. 同时开着多个强制跳转的地方。 服务器、插件、CDN 三处都设置了跳转,彼此打架,只保留一个权威的跳转入口最不容易出问题。

总结

开启 HTTPS 后后台陷入重定向循环,核心矛盾只有一句话:有人执意要跳 http,有人执意要跳 https,聊不到一块去。让它们统一到 https 上,问题就解决了。具体动作是:把数据库里的 home 和 siteurl 都改成 https,在反向代理或 CDN 环境下把真实协议告诉 WordPress,Cloudflare 用户则坚决不用 Flexible 模式,最后再检查一遍 .htaccess 里的跳转规则和残留缓存。日后若再更换 CDN、调整代理或迁移服务器,记得重复检查站点地址、真实协议、SSL 模式这三件事,循环就很难再找上门。把这三点当作更换基础设施后的固定检查项,你会省下大量排查时间。这样步步对齐之后,你就能顺畅地通过加密连接登录后台,既保住了 HTTPS 带来的安全与信任,也不再被”重定向次数过多”挡在门外。

U
UFO_PF作者

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

留下你的想法

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