当前位置:首页 > 焦点

此网页包含过多的重定向怎么解决

```html 此网页包含过多的此网重定向怎么解决

此网页包含过多的重定向怎么解决

“此网页包含过多的重定向”——这行字一蹦出来,浏览器就彻底罢工了。页包你点一下刷新,含过它再弹一次。重定点返回,向解已经来不及了。此网页面卡在某个中间状态,页包像一扇门被反复推开又关上,含过最后铰链断了。重定

我上个月就撞上过一次。向解给客户部署一个旧版 WordPress 站点,此网域名从 http 换到 https,页包又加了 www,含过结果首页死活打不开。重定Chrome 控制台里一片红,向解全是 ERR_TOO_MANY_REDIRECTS。折腾了半小时,发现是 .htaccess 里两段规则在互相打架:一段强制 https,另一段又把 https 请求踢回 http。服务器自己跟自己玩传球游戏,浏览器接不住。

先搞清楚谁在踢球

重定向本身不是坏事。你输入 example.com,服务器把你引到 www.example.com,这是正常操作。问题是当这个“引”变成循环——A 指向 B,B 又指回 A,或者 A 指向 B,B 指向 C,C 又回到 A。浏览器有个安全上限,通常 20 次左右,超过就直接掐断。

怎么查?别用浏览器。用 curl。打开终端,敲:

curl -I -L --max-redirs 10 http://你的域名

-I 只看响应头,-L 跟着跳转,--max-redirs 10 限制最多跳 10 次。你会看到每一跳的 Location 字段。哪一步开始重复,一眼就能看出来。如果输出里 Location 来回换,那就是死循环。

另一种情况更隐蔽:重定向发生在 JavaScript 里。比如页面加载后 window.location.href 被反复改写,或者某个前端路由库配置错了。这种 curl 抓不到,得看浏览器开发者工具的 Network 面板——勾上 “Preserve log”,刷新,看请求列表里哪个 URL 反复出现。

常见坑点,我踩过的

第一个:CDN 和源站各配了一套重定向规则。Cloudflare 上开了 “Always Use HTTPS”,源站 Nginx 又写了个 return 301 https://$host$request_uri;,但源站监听的是 80 端口,https 请求到了源站又被踢回 http。两边都觉得自己在做好事,结果把用户卡在中间。

第二个:WordPress 的 siteurl 和 home 两个选项不一致。一个填了 https,一个填了 http。后台一保存,前端就无限跳。进数据库 wp_options 表直接改,别指望后台能进去。

第三个:负载均衡器(比如 AWS ALB)做了 http→https 跳转,后端应用又信任了 X-Forwarded-Proto 头但没配好,应用以为自己是 http,又发一个跳转。这种最烦,因为每一层单独看都合理。

动手修,别猜

先关掉所有重定向规则。对,全关。把 .htaccess 里除了 WordPress 默认那段之外的全注释掉。Nginx 里把 return 301 和 rewrite 先删了。Cloudflare 的 “Always Use HTTPS” 也关掉。然后直接访问源站 IP 加端口,看能不能正常打开。

能打开,就一层一层加回去。先加 https 跳转,测。再加 www 跳转,测。每加一条,用 curl 跑一遍。别一次性全开,否则你又得从头排查。

如果用的是宝塔面板或者 cPanel,注意它们自带的“强制 HTTPS”按钮。那个按钮背后可能生成一段和你手写规则冲突的代码。我见过宝塔面板里同时开了“强制 HTTPS”和“伪静态”里的重定向,结果两个规则叠在一起,跳转次数直接翻倍。

还有个小技巧:在 Chrome 里打开 chrome://net-internals/#events,勾上 “Include socket bytes”,然后访问出问题的页面。搜索 “URL_REQUEST”,能看到完整的重定向链条,比开发者工具更底层。不过这玩意儿输出太啰嗦,一般用不上。

实在不行,换个思路

如果你只是想让网站能访问,不纠结于 SEO 或者域名统一,那就把所有重定向规则删干净。http 和 https 都能打开,www 和非 www 都能打开。内容一样,搜索引擎可能觉得重复,但至少用户能看。先恢复可用性,再慢慢调。

另一个野路子:用 meta refresh 或者 JavaScript 跳转代替服务器端 301。虽然不优雅,但至少不会触发浏览器的重定向次数限制。不过这只适合临时救急,长期用会被搜索引擎降权。

最后,如果你用的是 Vercel、Netlify 这类平台,检查 vercel.json 或 _redirects 文件。我见过有人写了 /* /index.html 200 做 SPA 回退,又写了 /old-path /new-path 301,结果旧路径被回退规则截胡,反复重写。平台文档里一般有“重定向优先级”说明,花五分钟读一下,比瞎试强。

修完记得清浏览器缓存。有时候规则已经改对了,但浏览器还记着之前的 301,继续按老路跳。开无痕窗口测,或者 curl 加 -H "Cache-Control: no-cache"。

```

分享到: