網站接上 Cloudflare 後,如果瀏覽器顯示「重新導向次數過多」、「頁面無法正常重新導向」或 ERR_TOO_MANY_REDIRECTS,通常不是網站檔案消失,而是瀏覽器、Cloudflare 與原始主機之間不斷互相轉址。
最常見的情況是:Cloudflare 使用 HTTP 連線到原始主機,但主機又強制轉成 HTTPS;Cloudflare 收到 HTTPS 後再次用 HTTP 回源,最後形成無限循環。
先提醒:不要一看到重新導向錯誤就刪除整個 .htaccess。應先確認 Cloudflare SSL 模式、主機憑證與現有轉址規則,再逐項排除。
重新導向次數過多的常見症狀
- 網站開啟 Cloudflare 橘雲後突然無法進入。
- 瀏覽器顯示 ERR_TOO_MANY_REDIRECTS。
- HTTP 與 HTTPS 網址互相跳轉。
- www 與非 www 網址不停切換。
- 首頁可以開啟,但登入頁或後台無限轉址。
- 關閉 Cloudflare 代理後網站恢復正常。
- 清除瀏覽器 Cookie 後短暫正常,之後又出現錯誤。
這類問題通常和轉址規則、SSL 模式或網站程式對 HTTPS 的判斷有關,不一定是 Cloudflare 本身故障。
1)先檢查 Cloudflare SSL/TLS 模式
進入 Cloudflare 後台的 SSL/TLS 設定,可以看到常見的加密模式:
- 關閉:Cloudflare 不提供 HTTPS。
- Flexible:訪客到 Cloudflare 使用 HTTPS,但 Cloudflare 到原始主機使用 HTTP。
- Full:Cloudflare 到原始主機也使用 HTTPS,但不嚴格驗證憑證。
- Full (strict):Cloudflare 使用 HTTPS 回源,並驗證原始主機憑證。
最容易造成無限重新導向的是 Flexible 模式。
例如原始主機有這條規則:
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
訪客以 HTTPS 進入 Cloudflare,但 Flexible 模式會用 HTTP 連到原始主機。原始主機看到 HTTP 後,再要求轉成 HTTPS;Cloudflare 接著又用 HTTP 回源,最後形成循環。
建議:如果原始主機已安裝有效 SSL 憑證,通常應使用 Full (strict),而不是 Flexible。
2)確認原始主機是否真的有 SSL 憑證
切換成 Full 或 Full (strict) 前,要先確認原始主機可以直接接受 HTTPS 連線。
常見憑證來源包括:
- Let's Encrypt 憑證。
- cPanel AutoSSL。
- aaPanel 申請的 Let's Encrypt 憑證。
- 1Panel 申請或匯入的 SSL 憑證。
- Cloudflare Origin Certificate。
如果原始主機沒有憑證,卻直接使用 Full (strict),可能會出現 526 Invalid SSL Certificate;使用 Full 時則可能出現 525 SSL Handshake Failed。
因此正確順序通常是:
- 先在原始主機安裝有效 SSL 憑證。
- 確認原始主機的 443 Port 可以正常連線。
- 再將 Cloudflare 設為 Full (strict)。
- 最後測試 HTTP 是否能正常轉到 HTTPS。
3)檢查 .htaccess 的 HTTPS 轉址規則
Apache 或 LiteSpeed 網站通常使用 .htaccess 執行 HTTPS 與 www 轉址。若規則重複或條件判斷錯誤,也會造成循環。
常見的 HTTPS 轉址規則:
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
接上 Cloudflare 後,部分主機可能需要判斷 Cloudflare 傳來的 X-Forwarded-Proto:
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
不過不能在所有環境直接照抄,因為部分主機會同時提供 HTTPS 與 X-Forwarded-Proto。如果條件組合錯誤,反而可能造成新的轉址問題。
排查時可以先暫時註解 HTTPS 轉址規則,再重新測試。如果停止轉址後網站恢復,問題多半就在轉址條件。
4)檢查 www 與非 www 是否互相轉址
除了 HTTP 與 HTTPS,另一種常見循環是 www 與非 www 互相跳轉。
例如主機設定:
www.example.com → example.com
但 Cloudflare Redirect Rule 或網站程式又設定:
example.com → www.example.com
這樣兩邊會互相轉址,瀏覽器最後顯示重新導向次數過多。
應統一決定網站正式網址:
https://example.com- 或
https://www.example.com
然後確認以下位置使用同一方向:
- Cloudflare Redirect Rules。
- Cloudflare Bulk Redirects。
- .htaccess。
- Nginx 設定。
- 網站後台的網站網址。
- 程式內的固定網址。
- canonical 標籤。
5)檢查 Cloudflare 的 Always Use HTTPS
Cloudflare 的 Always Use HTTPS 會將所有 HTTP 請求轉成 HTTPS。這個功能本身通常不會造成問題,但如果主機、程式或其他規則也做了不同方向的轉址,就可能產生衝突。
常見重複設定位置包括:
- Cloudflare Always Use HTTPS。
- Cloudflare Redirect Rules。
- 主機控制面板的強制 HTTPS。
- .htaccess 的 301 規則。
- Nginx server 區塊。
- 網站程式內的 HTTPS 判斷。
建議只保留一個主要的 HTTPS 轉址來源,其他位置則配合相同設定,不要每一層都各自寫一套不同規則。
6)aaPanel 或 1Panel 要檢查哪些設定?
aaPanel 與 1Panel 通常以 Nginx、OpenResty 或其他 Web Server 提供網站服務。除了 Cloudflare 設定,還要檢查網站的反向代理與 HTTPS 設定。
常見問題包括:
- 網站設定中已啟用強制 HTTPS。
- Nginx 又寫了一組 HTTP 轉 HTTPS 規則。
- 反向代理後端仍回傳自己的 HTTPS 轉址。
- 應用程式沒有正確識別
X-Forwarded-Proto。 - 前端代理與後端服務的網址設定不一致。
Nginx 常見的 HTTP 轉 HTTPS 設定:
server {
listen 80;
server_name example.com www.example.com;
return 301 https://example.com$request_uri;
}
若 Cloudflare、Nginx 和網站程式同時執行不同方向的轉址,就需要統一正式網域與協定。
7)網站程式可能誤判為 HTTP
網站位於 Cloudflare 或反向代理後方時,實際訪客使用 HTTPS,但程式接收到的內部連線可能是 HTTP。
如果程式只判斷:
$_SERVER['HTTPS']
可能會誤以為訪客正在使用 HTTP,於是再次執行 HTTPS 轉址。
這類情況常見於:
- 舊版 PHP 系統。
- 自製登入系統。
- 後台固定要求 HTTPS。
- Laravel、CodeIgniter 或其他框架的代理設定不完整。
- 反向代理沒有被列入可信任代理。
程式通常還要正確判斷:
$_SERVER['HTTP_X_FORWARDED_PROTO']
不過這類標頭也不能在未限制代理來源的情況下完全信任,否則可能產生安全風險。應依網站架構與可信任代理設定處理。
8)為什麼清除 Cookie 後可能暫時正常?
重新導向問題有時與登入 Session、語系、購物車或後台 Cookie 有關。
例如:
- 登入 Cookie 綁定 www,但網站改成非 www。
- Cookie 設定為 Secure,但網站被誤判為 HTTP。
- 登入頁與首頁使用不同網域。
- 後台判斷未登入後轉到登入頁,登入頁又轉回後台。
可以使用無痕視窗測試,但清除 Cookie 只能確認問題是否與瀏覽器狀態有關,不能取代主機與程式設定修正。
9)用 curl 查看實際轉址路徑
瀏覽器只會顯示重新導向太多,但不容易看出每一次到底跳到哪裡。可以使用 curl 檢查回應標頭:
curl -I http://example.com
curl -I https://example.com
curl -I https://www.example.com
查看回應中的:
HTTP/2 301
location: https://example.com/
要追蹤完整轉址,可以使用:
curl -IL http://example.com
如果輸出中重複出現兩個網址互相切換,就能直接看出循環方向。
建議排查順序
- 確認正式網址要使用 www 還是非 www。
- 檢查 Cloudflare SSL/TLS 模式。
- 確認原始主機有有效 SSL 憑證。
- 檢查 Cloudflare Always Use HTTPS 與 Redirect Rules。
- 檢查 .htaccess、Nginx 或控制面板的強制 HTTPS。
- 使用 curl 查看完整轉址路徑。
- 檢查網站程式是否正確識別 HTTPS 與反向代理。
- 清除 Cloudflare 快取與瀏覽器 Cookie 後重新測試。
遇到無限重新導向時,不建議直接做的事
- 不要直接刪除所有 .htaccess 內容。
- 不要在沒有主機 SSL 的情況下亂切 Full (strict)。
- 不要同時在 Cloudflare、主機與程式加入不同方向的轉址。
- 不要只清除瀏覽器 Cookie 就認為問題已修好。
- 不要反覆切換 SSL 模式,卻沒有記錄每次設定。
- 不要為了暫時恢復網站而長期使用 Flexible 模式。
結論:Cloudflare 出現 ERR_TOO_MANY_REDIRECTS,通常是 SSL 模式、HTTPS 強制轉址或 www 規則互相衝突。應先確認正式網址與原始主機憑證,再依序檢查 Cloudflare、Web Server 與網站程式的轉址方向。
守站人可協助排查 Cloudflare、cPanel、aaPanel、1Panel 與一般 Linux 主機的 SSL、DNS、HTTPS 重新導向及網站無法開啟問題。