本文约 2,491 字,预计阅读 7 分钟。文中命令与配置均经过实测,可直接参考执行。
引言
迁移完成后访问网站,浏览器没有显示页面,而是冷冷抛出一句「此网页无法正常运作,将您重定向的次数过多」,错误代码 ERR_TOO_MANY_REDIRECTS。页面像陷进了死循环,一直在刷新、跳转,永远到不了终点。这种情况在你同时做了「换域名」和「上 HTTPS」两件事时尤其常见,也常在服务器强制跳转规则、SSL 配置、站点地址三者互相打架时出现。
重定向循环的本质是「A 让去 B,B 又让回 A」,浏览器来回跑却始终跳不出这个圈,最终判定失败。要解决它,就得找出是哪两条规则在互相矛盾,然后拆掉其中一条。下面把最常见几组冲突逐一分析,给你可对照的排查清单。
故障原因分析
- HTTPS 与 HTTP 互踢。 站点地址配置成
https://,但服务器又在别处强制把请求 301 回http://,于是来回循环。
- www 与非 www 来回跳。 一边规则要求跳转到
www.域名,另一边(比如 CDN 或站点配置)又要求跳回不带 www 的版本。
- 站点地址与服务器配置不一致。 数据库里
siteurl是http://,而.htaccess或 Nginx 里写了无条件跳https://,两者对不上。
- 反向代理下未识别 HTTPS。 站点套了 CDN 或负载均衡,服务器看到的是 HTTP,于是又代跳一次,和 CDN 的强制 HTTPS 叠加成环。
- .htaccess 或插件残留跳转规则。 迁移前做过的域名跳转、SEO 插件设置、旧的重定向规则没清理,与现在的配置冲突。
- Cookie 域与跳转冲突。 换域名后旧的登录 Cookie 域不对,部分场景会被判定需要重新登录而反复跳转。
分步解决方案
第一步:确认站点地址与协议一致
先查数据库,明确站点到底应该用哪个协议和域名:
SELECT option_name, option_value FROM wp_options
WHERE option_name IN ('siteurl', 'home');
确保两项的值与服务器实际启用的协议、域名完全一致。比如已启用 HTTPS 且用 www,就都填 https://www.newdomain.com。
第二步:检查 .htaccess 是否有强制跳转
打开网站根目录的 .htaccess,如果看到类似下面这种「无条件跳 HTTPS」的规则,先注释或删除它以排除干扰:
# 文件路径:网站根目录/.htaccess
# 可能是循环元凶,排查时先禁用
# RewriteEngine On
# RewriteCond %{HTTPS} off
# RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
排查原则:不要出现两条互相矛盾的跳转规则(一条跳 https,另一条跳 http;或一条跳 www,另一条跳非 www),只保留一条即可。
第三步:Nginx 环境检查强制跳转
宝塔等 Nginx 站点常在配置或「SSL」里勾选了「强制 HTTPS」,检查是否有重复或冲突的跳转:
# 只保留一条跳转到 HTTPS 的规则
if ($scheme != "https") {
return 301 https://$host$request_uri;
}
同时不要在别处再写一条跳回 http 的规则。
第四步:代理/CDN 场景添加信任头
若站点在 CDN、反代后方,服务器误判为 HTTP,需要在 wp-config.php 中让 WordPress 识别真实协议:
// 文件路径:网站根目录/wp-config.php
// 仅在本站确实位于反向代理/CDN 后方时添加
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') {
$_SERVER['HTTPS'] = 'on';
}
这样 WordPress 能正确判断当前是 HTTPS,不再反复触发跳转。
第五步:清理残留规则与缓存
逐一排查并处理后,清理浏览器缓存(或换无痕模式)、站点缓存插件缓存,以及 CDN 缓存,再访问测试。
常见踩坑点
- 同时保留 http 和 https 两条跳转。 这是循环的头号成因,检查所有规则,只留一条。
- 站点地址协议与服务器强制跳转不符。 数据库写 http、规则跳 https,必然循环,两边要统一。
- CDN 和源站双重强制 HTTPS。 代理层和源站各跳一次且方向不同,会用
X-Forwarded-Proto判断,配置要一致。 - 只清浏览器缓存不查服务器。 服务器规则没改,清缓存毫无意义;先改规则,再清缓存。
- 误以为必须删掉 .htaccess。 正确的做法是删除冲突的跳转行,而不是整体删掉 WordPress 的标准伪静态规则。
- www 跳转方向反复改动。 在解析、证书、站点地址之间来回改,反而制造新的循环,先定好一个规范再统一配置。
总结
ERR_TOO_MANY_REDIRECTS 重定向循环看起来棘手,本质却很简单:两条跳转规则方向相反,让浏览器在 A 和 B 之间来回跑。排查时先确认站点地址的协议与域名是否统一,再翻 .htaccess 和 Nginx 配置,删掉互相矛盾的强制跳转(http/https、www/非 www 只能留一个方向),位于 CDN 或反代后方时补上真实协议识别,最后清缓存复测。只要守住「跳转方向唯一」这条原则,迁移后的重定向循环就能被快速拆解,网站立刻恢复畅通。
排查时还有一个好用的技巧:打开浏览器开发者工具的「网络」面板,勾选「保留日志」,然后访问站点,观察请求的 301/302 状态码来回跳转的路径,记录下它们不断往返的两个地址,就能精准定位到底是哪一对规则在互踢。看清了往返链路,修改时就能做到有的放矢,也不会因为盲改而制造出新的冲突。
