重定向循环或异常跳转问题排查
什么是重定向循环
重定向循环发生在:URL A 被重定向到 B,B 又被重定向到 A,形成 A→B→A→B→… 的无限循环。浏览器会检测到这个循环并报错(如"网页重定向次数过多")。
常见原因
原因 1:全局重定向 URL 自身被重定向
如果你把全局重定向 URL 设为 https://xxx.pages.dev/redirect?,而 Cloudflare Pages 的 xxx.pages.dev 域名本身也在 default.redirect 里被重定向到另一个域名……循环就形成了。
解决方法:确保全局重定向的中间层域名不在 default.redirect 里。
原因 2:default.redirect 里的正则互相匹配
# 错误配置:
google.com::google.cn
google.cn::google.com
google.com 重定向到 google.cn,但 google.cn 又匹配默认规则的 google.cn 自身(不匹配 google.com),所以这组没问题。但如果:
# 危险配置:
example\.com::mirror\.example\.com
mirror\.example\.com::example\.com
这会形成循环!
解决方法:重定向规则应该是单向的。源域名 → 目标域名,目标域名不要再有回源的规则。
原因 3:资源重定向导致的循环
开启了"自定义资源重定向"后,网页中的资源请求也会被重定向。如果:
- 页面 HTML 被重定向到 A
- A 页面引用的某个 JS/CSS/Build 工具被重定向到 B
- B 又被重定向回 A
解决方法:
- 先关掉"自定义资源重定向",只开普通重定向测试
- 确认网站能正常打开后再逐步开启
- 检查 default.redirect 里的正则,避免资源域名也被重定向
原因 4:301/302 HTTP 重定向叠加
有些网站自己就会做 301/302 重定向(比如 http → https)。uWeb 的重定向叠加在 HTTP 重定向上可能导致意外行为。
解决方法:
- 对于 http→https 这类浏览器自己就能处理的重定向,不要在 default.redirect 里重复
- 如果中间层(全局重定向)会做额外的 HTTP 重定向,检查它的实现逻辑
排查步骤
第一步:关掉所有重定向
- 长按设置 → 取消勾选所有重定向相关选项
- 清空 default.redirect(或临时改名为 default.redirect.bak)
- 清空后台重启 uWeb
- 确认没有循环后逐步加回
第二步:逐个开启
每次只开启一个重定向层:
- 先开 default.redirect(普通重定向)→ 测试
- 再加全局重定向 URL → 测试
- 最后开资源重定向 → 测试
在每一步确认网站都能正常访问,一旦某一步开始循环,就知道是那一层的问题。
第三步:检查具体规则
如果是 default.redirect 导致的:
- 打开 default.redirect
- 暂时清空所有规则,只保留最必要的 1~2 条
- 逐步添加其他规则
- 找到导致循环的那一对规则
第四步:检查全局重定向中间层
如果用的是 Cloudflare Pages/Workers 作为全局重定向:
- 用普通浏览器打开中间层 URL
- 确认中间层本身不会做额外的 HTTP 重定向
- 确认中间层能正确代理目标 URL
重定向的"黄金法则"
- 单向:重定向规则永远是 A→B,不是 A→B→A
- 最少:default.redirect 里的规则越少越好
- 先关后开:改配置前先关掉旧配置,改完再开新配置
- 中间层域名不要进规则:全局重定向的中间层 URL 本身不要被 default.redirect 处理