Server

ERR_TOO_MANY_REDIRECTS — Nguyên nhân và cách khắc phục

Cập nhật 2026-08-30Đọc ~8 phút

ERR_TOO_MANY_REDIRECTS nghĩa là trình duyệt đã đi theo chuỗi chuyển hướng hơn hai chục bước, nhận ra mình đang đi vòng tròn, và dừng lại. Nó không hỏng ngẫu nhiên — có một vòng lặp thật sự, và vòng lặp đó có thể nhìn thấy được.

Điều làm lỗi này dễ chịu hơn phần lớn lỗi khác là nguyên nhân gần như luôn thuộc một nhóm rất hẹp: hai thành phần cùng quản một quy tắc theo hai hướng đối nghịch. Cloudflare gửi về HTTP trong khi máy chủ ép sang HTTPS. WordPress muốn có "www" trong khi .htaccess muốn bỏ nó. Tìm ra cặp đang cãi nhau là xong việc.

Nhìn thấy vòng lặp trong ba mươi giây

Đừng đoán. Một lệnh sẽ in ra toàn bộ chuỗi chuyển hướng kèm mã trạng thái và đích đến của từng bước.

Chạy: curl -sIL -o /dev/null -w "%{http_code} %{url_effective}\n" https://trangcuaban.com/ — hoặc dùng bản đầy đủ hơn để xem từng chặng: curl -sIL https://trangcuaban.com/ | grep -iE "^(HTTP|location)".

Kết quả sẽ cho thấy ngay mẫu lặp. Hai địa chỉ trỏ qua lại nhau nghĩa là xung đột giữa hai cấu hình. Cùng một địa chỉ trỏ về chính nó nghĩa là một quy tắc rewrite không có điều kiện dừng.

Mẫu bạn nhìn thấyNguyên nhân gần như chắc chắn
http → https → http → httpsCloudflare SSL mode "Flexible" trong khi máy chủ ép HTTPS
có www → không www → có wwwSiteurl trong WordPress khác quy tắc trong .htaccess
/trang → /trang/ → /trangXung đột quy tắc dấu gạch chéo cuối URL
URL trỏ về chính nóQuy tắc rewrite thiếu điều kiện loại trừ
/ → /login → /Kiểm tra phiên đăng nhập lỗi hoặc cookie không lưu được

Nguyên nhân thường gặp, phổ biến nhất trước

  • Cloudflare SSL mode đặt ở "Flexible". Cloudflare kết nối tới máy chủ bằng HTTP thuần, máy chủ thấy HTTP nên chuyển hướng sang HTTPS, Cloudflare lại gọi bằng HTTP, và vòng lặp bắt đầu. Đây là nguyên nhân số một và cách sửa là đổi sang "Full (strict)".
  • Cấu hình URL của WordPress lệch với quy tắc máy chủ. Nếu siteurl lưu bản có "www" còn .htaccess loại bỏ "www", hai bên sẽ đẩy qua đẩy lại vô hạn.
  • Hai quy tắc rewrite mâu thuẫn trong .htaccess. Thường xảy ra khi bạn dán một đoạn ép HTTPS tìm được trên mạng vào file đã có sẵn quy tắc khác.
  • Plugin ép SSL cài chồng lên cấu hình máy chủ đã ép SSL. Cả hai đều đúng một nửa, và kết quả là một vòng lặp.
  • Chuyển hướng dấu gạch chéo cuối URL đánh nhau. Một lớp thêm dấu gạch chéo, lớp kia bỏ nó đi.
  • Cookie phiên đăng nhập không lưu được. Ứng dụng chuyển hướng tới trang đăng nhập, đăng nhập thành công rồi chuyển về, nhưng phiên không tồn tại nên nó lại chuyển tới trang đăng nhập.
  • Chuỗi chuyển hướng cũ chồng lên nhau sau khi đổi tên miền. Mỗi lần chuyển nhà thêm một tầng, và tới một lúc nào đó chúng khép thành vòng.

Kiểm tra theo thứ tự này

  • Chạy lệnh curl ở trên và ghi lại chuỗi chuyển hướng. Mọi bước sau đều dễ hơn khi bạn đã biết mẫu lặp.
  • Xóa cookie cho tên miền đó rồi thử lại trong cửa sổ ẩn danh. Vòng lặp do cookie hỏng sẽ biến mất ngay, và bạn tiết kiệm được cả buổi chỉnh cấu hình không cần thiết.
  • Nếu dùng Cloudflare, kiểm tra SSL/TLS mode trước mọi thứ khác. "Flexible" gần như luôn là câu trả lời khi vòng lặp liên quan tới HTTP và HTTPS.
  • Bật chế độ Development trong Cloudflare hoặc tạm tắt proxy (đám mây màu xám). Nếu vòng lặp biến mất, vấn đề nằm ở Cloudflare chứ không phải máy chủ.
  • Đổi tên .htaccess thành .htaccess.bak rồi thử lại. Vòng lặp biến mất nghĩa là một quy tắc trong đó là thủ phạm — thêm lại từng khối một để tìm ra.
  • Với WordPress, đặt WP_HOME và WP_SITEURL trực tiếp trong wp-config.php. Cách này ghi đè giá trị trong cơ sở dữ liệu và loại bỏ hoàn toàn một nguồn xung đột.
  • Tắt các plugin liên quan tới SSL, cache và bảo mật. Ba nhóm này thường tự thêm quy tắc chuyển hướng mà bạn không biết.
  • Kiểm tra cấu hình Nginx hoặc Apache tìm khối redirect trùng lặp. Sau nhiều lần chỉnh sửa, không hiếm khi có hai khối cùng ép HTTPS ở hai chỗ khác nhau.
💡 Sau mỗi thay đổi hãy thử lại bằng curl chứ đừng chỉ bấm tải lại trong trình duyệt. Trình duyệt cache chuyển hướng 301 rất lâu, và bạn có thể vẫn thấy lỗi cũ dù đã sửa xong từ lâu.

Sửa cho đúng và giữ nó đúng

Nguyên tắc duy nhất cần nhớ: mỗi quy tắc chuẩn hóa chỉ nên tồn tại ở đúng một nơi.

Chọn một lớp để xử lý HTTPS — hoặc Cloudflare, hoặc máy chủ, hoặc ứng dụng — rồi gỡ quy tắc tương ứng khỏi hai lớp còn lại. Tương tự với "www" và dấu gạch chéo cuối URL. Phần lớn vòng lặp không phải do quy tắc sai, mà do quy tắc đúng bị viết ở hai chỗ.

Đặt chuyển hướng ở lớp cao nhất có thể. Nếu Cloudflare đã lo phần HTTPS, máy chủ không cần biết gì về nó nữa; nếu máy chủ lo, đừng cài thêm plugin làm việc tương tự.

Gộp các chuỗi chuyển hướng cũ thành một bước duy nhất. Sau vài lần đổi tên miền, "http://cũ" thường phải đi qua ba bốn chặng mới tới đích cuối — hãy trỏ thẳng nó tới địa chỉ đúng, vừa tránh nguy cơ tạo vòng lặp vừa nhanh hơn cho khách.

Muốn toàn quyền với quy tắc chuyển hướng và SSL của mình?

Cloud VPS với quyền root đầy đủ — một chỗ duy nhất để cấu hình HTTPS, rewrite và tên miền. Từ ฿150/tháng.

Câu hỏi thường gặp

Vì sao website báo vòng lặp với tôi mà người khác vẫn vào bình thường?

Gần như chắc chắn là cookie. Một cookie phiên cũ hoặc hỏng khiến ứng dụng cứ chuyển hướng bạn tới trang đăng nhập rồi quay lại. Xóa cookie cho tên miền đó, hoặc mở bằng cửa sổ ẩn danh để xác nhận trước khi động vào cấu hình.

Tôi đã sửa cấu hình nhưng vòng lặp vẫn còn. Vì sao?

Chuyển hướng 301 được trình duyệt cache rất lâu, đôi khi tới khi bạn xóa dữ liệu duyệt web. Kiểm tra lại bằng curl từ dòng lệnh — nếu curl cho kết quả đúng thì cấu hình đã ổn và thứ bạn đang thấy chỉ là bản cache cũ.

Vòng lặp chuyển hướng ảnh hưởng SEO thế nào?

Nặng, vì Googlebot không lấy được nội dung. Trang trong vòng lặp không thể được thu thập, không thể vào chỉ mục, và những trang đã có sẽ rơi khỏi kết quả tìm kiếm nếu tình trạng kéo dài. Dùng URL Inspection trong Search Console để xác nhận Googlebot thực sự nhận được gì.

Cloudflare SSL mode nào là đúng?

Full (strict), khi máy chủ đã có chứng chỉ hợp lệ — kể cả chứng chỉ Let's Encrypt miễn phí. "Flexible" là nguyên nhân phổ biến nhất của vòng lặp chuyển hướng và cũng để đoạn đường giữa Cloudflare và máy chủ của bạn không được mã hóa.