Cloudflare 轉址循環排查|Redirect Loop
這份排查用在 Cloudflare Pages、Redirect Rules、DNS 或 framework redirect 設定後,瀏覽器出現 ERR_TOO_MANY_REDIRECTS 的情境。
症狀
- Chrome 顯示
ERR_TOO_MANY_REDIRECTS。 - Safari 顯示頁面重新導向次數過多。
curl -I -L看到 root、www、HTTP、HTTPS 之間來回跳轉。
常見原因
root redirect 到自己
Redirect Rule 條件太寬,target 又指回同一個 host,例如:
https://example.com/* → https://example.com/$1這會讓每次 request 都重新命中同一條 redirect。
root → www,但 www 又 CNAME 到 root
如果規則設定:
example.com/* → https://www.example.com/$1但 DNS 裡 www CNAME 指向 root domain,就可能形成:
root → www → root → wwwCloudflare Pages 專案中,www CNAME 應直接指向 Pages project,不要指向 root。
HTTP / HTTPS 規則互相打架
Always Use HTTPS、Page Rules、Redirect Rules、Pages _redirects、framework middleware 同時存在時,可能互相改寫 URL。尤其是某一層導到 HTTPS,另一層又導回 HTTP 或不同 host。
修法
1. 明確設定 Target URL
Target URL 要包含正確 canonical host,例如:
https://www.example.com/${uri.path}不要讓 target URL 只寫相對路徑,也不要指回同一個 host。
2. 修正 www CNAME
若 canonical 是 www,DNS 應該是:
wwwCNAME → Pages project target,例如project-name.pages.dev- root → 透過 Redirect Rule 301 到
https://www.example.com
不要讓 www CNAME → root。
3. 簡化 redirect 層級
優先把 host redirect 放在 Cloudflare Redirect Rules。Framework 內只處理應用層路由,不要同時做 root / www / HTTPS 收斂。
驗證指令
Redirect loop 排查
追蹤 redirect chain
curl -I -L https://example.com/curl -I -L http://example.com/curl -I -L https://www.example.com/快速確認是否還在 loop
只看 status 與 final URL
curl -s -o /dev/null -w "%{http_code} %{url_effective}\n" -L https://example.com/完成標準
Checklist
Redirect Loop 修復檢查
- root 不會 redirect 到自己。
- root →
www時,wwwCNAME 直接指向 Pages project。 - HTTP / HTTPS / root / www 最後收斂到同一個 canonical URL。
-
curl -I -L不再無限跳轉。 - framework middleware 或
_redirects沒有重複做 host 收斂。