网站提示“重定向次数过多”(ERR_TOO_MANY_REDIRECTS)怎么办?WordPress 站排查步骤

网站打不开,提示“重定向次数过多”(ERR_TOO_MANY_REDIRECTS)怎么办?按顺序排查浏览器缓存、WordPress 网站地址、Cloudflare SSL 模式、.htaccess 与插件冲突、www 跳转,附 curl 与 wp-config 示例。

网站打开后浏览器提示“该网页无法正常运作 / 重定向次数过多”(Chrome 里的错误代码是 ERR_TOO_MANY_REDIRECTS),说明请求在几个地址之间来回跳转,一直没有落到最终页面。先给结论:最常见的原因是 HTTPS 设置不一致,比如 Cloudflare 的 SSL 模式是 Flexible,而源站又强制跳转 HTTPS;其次是 WordPress 的网站地址设置、插件或服务器规则互相冲突。按下面的顺序排查,大多数情况能在几分钟内定位。

先确认报错长什么样

  • Chrome / Edge:“该网页无法正常运作”,下方显示 ERR_TOO_MANY_REDIRECTS;
  • Firefox:“页面没有正确重定向”;
  • Safari:“Too many redirects occurred”。

这些都是同一类问题:网站在 A 地址跳到 B,B 又跳回 A,浏览器跳了一定次数后主动停止。

第一步:排除浏览器和缓存

  • 用无痕窗口打开网址,或换一个浏览器、换手机网络再试;
  • 清除该网站的 Cookie 和缓存。有时是旧的登录 Cookie 或缓存的跳转导致的;
  • 如果无痕窗口正常、普通窗口不正常,基本就是本地 Cookie 或缓存问题,清除即可。

如果所有浏览器、所有网络都打不开,说明问题在网站或服务器一侧,继续往下查。

第二步:看一下跳转链路

用命令行可以直接看到跳转在哪里循环(把网址换成你自己的):

curl -I -L --max-redirs 8 https://example.com/

输出里每一段的 HTTP/… 301 和 location: 就是一次跳转。如果你看到 http:// 跳到 https://,再跳回 http://,或者 www 与不带 www 的地址互相跳,就找到了循环发生的位置。后面几步都是根据这个现象去对应。

第三步:检查 WordPress 的网站地址

进入后台“设置 → 常规”,对比两项:

  • WordPress 地址(URL);
  • 站点地址(URL)。

两个地址应该使用同样的协议(都是 https)和同样的主机名(都带 www,或都不带)。如果一个是 http、一个是 https,或者一个带 www、一个不带,就会触发循环。

如果已经打不开后台,可以在网站根目录的 wp-config.php 里临时指定地址(把域名换成你自己的):

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

也可以用 WP-CLI 查看和修改:wp option get siteurl、wp option get home。改完后记得清缓存再测试。

第四步:CDN / Cloudflare 的 SSL 模式

如果网站用了 Cloudflare,这是最值得优先检查的一步。Cloudflare 的 SSL/TLS 加密模式如果设为 Flexible(灵活),它到你源站服务器之间走的是 http。此时如果源站(或 WordPress、插件)又要求“所有请求必须 https”,就会不停地重定向。

  • 推荐做法:源站安装了有效证书的话,把模式改为 Full 或 Full (strict);
  • 源站暂时没有证书:先在源站配置证书,再改模式。不建议长期使用 Flexible;
  • 如果同时开了“始终使用 HTTPS”、WordPress 插件强制 https、服务器强制 https,只保留一处就够,重复设置容易互相打架。

Cloudflare 与其他 CDN 的区别和选择,可以看 Cloudflare vs QUIC.cloud:WordPress CDN 怎么选。

如果网站放在反向代理或负载均衡后面,WordPress 可能识别不到真实的 https,也会引起循环。这时可以在 wp-config.php 里加上判断(仅在你确认代理会传 X-Forwarded-Proto 时使用):

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

第五步:服务器规则、插件和主题

  • Apache 的 .htaccess:先把根目录的 .htaccess 重命名备份,再访问网站。能打开说明是里面的跳转规则有冲突;回到后台“设置 → 固定链接”点一次保存可重新生成默认规则;
  • Nginx:检查站点配置里的 return 301 或 rewrite 规则,看是否有两处都在做 http 到 https 或 www 的跳转;
  • 插件:把 wp-content/plugins 目录临时重命名,使所有插件停用,能打开就逐个恢复,找出问题插件。重点怀疑 SSL/HTTPS 强制类、缓存类、重定向类、安全类插件;
  • 主题:临时切换到默认主题测试。

每次只改一处,改完测试一次,这样才能确定是哪一项起了作用。

第六步:检查域名解析和 www 跳转

  • 确认 example.com 和 www.example.com 都解析到了正确的地方;
  • 只保留一个“主域名”:要么统一跳到带 www,要么统一跳到不带 www,不要在多处(DNS 服务商、CDN、服务器、插件)各设一套相反的规则;
  • 刚修改过解析的话,等待生效后再测试。

域名和解析的基础设置,可以参考 WordPress 建站教程:绑定网站域名,域名与 DNS 的统一管理见 SHOPAGG 域名页面。

每天定时出现一次怎么办

如果网站平时正常,只在固定时间段出现一次,要多想想“定时发生的事情”:定时备份、缓存清理、证书续期、计划任务(WP-Cron)或 CDN 回源。可以在出现时立刻用第二步的命令记录跳转链路,同时查看服务器的错误日志,把出现的时间、跳转链路和日志一起保留下来,方便定位。这类问题没有统一答案,要结合自己的服务器环境判断。

仍然无法解决时,准备这些信息

  • 出错网址和出现的时间;
  • 第二步 curl 命令的完整输出;
  • 是否使用 CDN、反向代理,以及 SSL 模式;
  • 最近改过什么(插件、证书、域名、服务器配置);
  • 网站的服务器类型(Apache / Nginx 等)。

把这些信息发给技术支持,会比只说“打不开”快得多。你也可以到 SHOPAGG 问答 里描述问题,社区里有类似的实际提问和回答。

常见问题

只有我自己打不开,别人正常,怎么办?通常是本地 Cookie 或缓存问题,先清除后再试。

改了 SSL 模式后还是不行?清除 CDN 缓存和浏览器缓存,并再次用 curl 看跳转链路是否还有循环。

后台也打不开怎么改设置?用 wp-config.php 指定地址,或通过 WP-CLI、数据库修改 siteurl 和 home。修改数据库前请先备份。

说明:本文整理的是该报错的通用排查思路和官方通用配置方法,没有引用具体的网站案例或数据。不同服务器和插件的设置界面可能不同,修改前请先备份网站。


作者:庄朋龙(关于 SHOPAGG)。

分享您的喜爱

发表回复