ERR_TOO_MANY_REDIRECTS to pętla przekierowań. Zobacz, jak znaleźć jej źródło curlem i naprawić HTTPS, www, Cloudflare Flexible oraz adresy WordPressa.
Autor: McProdukt · Opublikowano:
ERR_TOO_MANY_REDIRECTS oznacza pętlę przekierowań: adres A odsyła do B, a B z powrotem do A, więc przeglądarka przerywa wczytywanie strony. Najczęściej winne jest wymuszanie HTTPS lub wersji z www w dwóch miejscach naraz, a gdy błąd widzi tylko jedna osoba - jej ciasteczka lub pamięć przeglądarki. Niżej diagnoza poleceniem curl, tabela przyczyn i kroki naprawy.
W skrócie:
curl -sSIL wypisuje każdy krok łańcucha z nagłówkiem Location, więc widać, która reguła zawraca ruch.ERR_TOO_MANY_REDIRECTS (dosłownie „zbyt wiele przekierowań”) oznacza, że przeglądarka dostała z rzędu tyle przekierowań, że przerwała wczytywanie, nie docierając do treści. Przekierowanie to odpowiedź serwera z kodem z grupy 3xx (np. 301 lub 302) i nagłówkiem Location, który wskazuje nowy adres.
Pętla przekierowań to łańcuch, który nigdy nie kończy się stroną z treścią: A odsyła do B, B do A i tak w kółko. Specyfikacja HTTP (RFC 9110) mówi, że klient powinien wykrywać takie cykle i je przerywać; jej wcześniejsza wersja zalecała limit pięciu przekierowań. Przeglądarki mają własne progi i pokazują błąd zwykle po kilkunastu-kilkudziesięciu skokach, curl domyślnie wykonuje najwyżej 50 przekierowań, a roboty Google - do 10.
Chrome pokazuje kod ERR_TOO_MANY_REDIRECTS i informację, że strona przekierowała Cię zbyt wiele razy. Firefox pisze, że serwer przekierowuje żądanie w sposób, który nigdy się nie zakończy. Gdy pętlę wykryje sam serwer, zobaczysz raczej błąd 500.
Na cudzej stronie sprawdzisz tylko, czy pętli nie podtrzymują ciasteczka albo pamięć Twojej przeglądarki. Według dokumentacji MDN odwiedzający niewiele tu zrobi, chyba że problem leży po jego stronie - w pamięci podręcznej lub ciasteczkach.
Źródło pętli znajdziesz, wypisując cały łańcuch przekierowań poleceniem curl i czytając nagłówek Location w każdej odpowiedzi. curl to narzędzie wiersza poleceń do wysyłania żądań HTTP: -I pobiera same nagłówki, -L podąża za przekierowaniami, --max-redirs ogranicza liczbę skoków, a -sS ukrywa pasek postępu, zostawiając komunikaty o błędach. W Windows PowerShell wpisz curl.exe - samo curl bywa tam aliasem innego polecenia.
Przykład dla konfliktu www (adresy i odpowiedzi przykładowe, wynik skrócony):
curl -sSIL --max-redirs 10 http://twojadomena.pl
HTTP/1.1 301 Moved Permanently
Location: https://twojadomena.pl/
HTTP/2 301
location: https://www.twojadomena.pl/
x-redirect-by: WordPress
HTTP/2 301
location: https://twojadomena.pl/
(...)
curl: (47) Maximum (10) redirects followed
Pierwszy skok (http na https) jest prawidłowy. Dalej WordPress - co zdradza nagłówek x-redirect-by: WordPress - kieruje na wersję z www, a serwer odsyła z powrotem na adres bez www, aż curl zgłosi przekroczenie limitu. Wtyczki mogą wpisywać w tym nagłówku własną nazwę. Gdy go brak, sprawdź najpierw ustawienia panelu i plik .htaccess.
To samo zobaczysz w przeglądarce: narzędzia deweloperskie (F12), zakładka Network, opcja Preserve log - każde przekierowanie to osobny wiersz z kodem 301 lub 302 i nagłówkiem Location. Sprawdź cztery warianty adresu: http i https, z www i bez.
| Co widać w łańcuchu | Co to zwykle oznacza | Gdzie szukać |
|---|---|---|
| bez www → www → bez www | dwie reguły chcą innej wersji adresu | ustawienie domeny w panelu i Adres witryny w WordPressie |
| https → http → https | coś cofa ruch na http | adresy w WordPressie zapisane z http, wtyczki, przy Cloudflare - Always Use HTTPS |
| ten sam adres w kółko | serwer nie widzi, że połączenie jest szyfrowane | proxy lub CDN w trybie Flexible |
pętla tylko na /wp-admin/ lub /wp-login.php | WordPress nie rozpoznaje szyfrowanego połączenia | stała FORCE_SSL_ADMIN za proxy lub CDN |
nagłówek x-redirect-by | przekierowuje WordPress lub wtyczka | adresy w WordPressie, wtyczki przekierowań, SEO i językowe |
| curl: jeden skok i kod 200, przeglądarka: błąd | przeglądarka trzyma stare przekierowanie lub ciasteczka | dane witryny i pamięć podręczna przeglądarki |
Najczęstsze przyczyny to wymuszanie HTTPS lub www w kilku miejscach naraz, Cloudflare w trybie Flexible, błędne adresy w WordPressie, kolidujące wtyczki i zapamiętane przekierowania. Tabela zbiera objawy i naprawę, niżej szczegóły.
| Objaw | Najczęstsza przyczyna | Jak naprawić |
|---|---|---|
| Błąd zaraz po włączeniu HTTPS | HTTPS wymuszone w panelu i dodatkowo we wtyczce lub w .htaccess | zostaw jedno przekierowanie, resztę usuń |
| Pętla między adresem z www i bez www | panel kieruje na jedną wersję, WordPress na drugą | wpisz w WordPressie wersję ustawioną w panelu |
| Błąd po włączeniu Cloudflare | tryb SSL/TLS Flexible i przekierowanie na HTTPS na serwerze | przełącz tryb na Full lub Full (strict) albo usuń przekierowanie z serwera |
| Błąd po przeprowadzce lub zmianie domeny | stare adresy w opcjach siteurl i home albo w stałych WP_HOME i WP_SITEURL | popraw adresy w wp-config.php lub w bazie |
| Błąd po instalacji lub aktualizacji wtyczki | reguła wtyczki (przekierowania, SEO, wersje językowe, SSL) koliduje z serwerem | wyłącz wtyczkę zmianą nazwy jej katalogu |
| Pętla zostaje mimo poprawek | stara odpowiedź w LSCache (pamięci podręcznej LiteSpeed), CDN lub przeglądarce | wyczyść pamięć podręczną i dane witryny |
| Po zalogowaniu wracasz na ekran logowania | ciasteczko logowania zapisane dla innej wersji adresu | ustaw wszędzie ten sam adres i usuń ciasteczka witryny |
Dwa mechanizmy wymuszające HTTPS to częste źródło pętli tuż po włączeniu certyfikatu SSL. Jeśli obie reguły prowadzą pod ten sam adres, kończy się co najwyżej na zbędnym skoku. Pętla powstaje, gdy różnią się szczegółem: jedna kieruje na www, druga bez, albo jedna nie rozpoznaje, że połączenie jest już szyfrowane.
Na hostingu McProdukt HTTPS włączysz w DirectAdmin: „SSL Certificates” → „Force SSL with https redirect”, a przekierowanie www lub bez www - w ustawieniach domeny w DirectAdmin. Serwer OpenLiteSpeed wykonuje też reguły RewriteRule i Redirect z .htaccess, więc reguła w pliku działa obok ustawienia panelu i może je dublować. Jeśli wolisz .htaccess, wystarczy ta reguła na początku pliku (jak w poradniku wymuszenie HTTPS na stronie):
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Wybierz jedno: panel albo tę regułę, a wymuszanie SSL we wtyczce wyłącz. Kolejność reguł i pułapki tego pliku opisuje przewodnik .htaccess w praktyce.
Pętla między www a wersją bez www powstaje, gdy serwer kieruje na jedną wersję adresu, a WordPress na drugą. WordPress sam przekierowuje odwiedzających na wersję z www albo bez www, zgodnie z polem Adres witryny (URL), więc ustawienie domeny w panelu i adres w WordPressie muszą się zgadzać. Wybierz wersję główną, ustaw ją w panelu i wpisz identyczną w Ustawienia → Ogólne.
Pętla tuż po włączeniu Cloudflare to zwykle tryb szyfrowania SSL/TLS Flexible przy serwerze, który sam przekierowuje HTTP na HTTPS. Cloudflare to usługa CDN (Content Delivery Network) i serwer pośredniczący (proxy) między odwiedzającym a hostingiem. W trybie Flexible łączy się z serwerem przez HTTP, serwer odsyła na HTTPS, przeglądarka znowu trafia do Cloudflare - i koło się zamyka.
Dokumentacja Cloudflare podaje dwa wyjścia: usunąć przekierowanie z serwera albo przełączyć tryb na Full lub wyższy, co wymaga certyfikatu SSL na serwerze (stan na październik 2026). Pierwsze wyjście zostawia nieszyfrowany odcinek między Cloudflare a serwerem, dlatego lepszy jest Full (strict), który dodatkowo sprawdza ważność certyfikatu serwera. Pętle tworzą też sprzeczne reguły przekierowań i opcja Always Use HTTPS, gdy serwer kieruje z HTTPS na HTTP. Więcej o takich usługach we wpisie CDN - co to jest i kiedy się opłaca.
WordPress trzyma dwa adresy - Adres WordPressa (URL) i Adres witryny (URL) - i według nich buduje linki oraz przekierowania. W bazie to opcje siteurl i home w tabeli wp_options; w wp-config.php mogą je nadpisać stałe WP_SITEURL i WP_HOME. Gdy po przeprowadzce lub włączeniu HTTPS został tam stary adres, http albo inna wersja www, WordPress i serwer mogą odsyłać ruch w przeciwne strony.
Według dokumentacji WordPressa oba adresy podajesz z https:// i bez ukośnika na końcu. Wpisane w wp-config.php blokują edycję pól w Ustawienia → Ogólne:
define( 'WP_HOME', 'https://twojadomena.pl' );
define( 'WP_SITEURL', 'https://twojadomena.pl' );
Dopisz je nad komentarzem kończącym edycję (po angielsku That's all, stop editing!). Gdy WordPress leży w podkatalogu, WP_SITEURL musi go zawierać. Pełną procedurę opisuje wpis przeniesienie WordPressa na nową domenę.
Pętlę tworzą też wtyczki, które same przekierowują: menedżery przekierowań, wtyczki SEO, wersji językowych i wymuszania SSL. Jeśli błąd pojawił się po instalacji lub aktualizacji jednej z nich, wyłącz ją jako pierwszą.
Druga pułapka to pamięć. Specyfikacja HTTP pozwala zapisać odpowiedź 301 w pamięci podręcznej nawet bez podanego czasu ważności, więc przeglądarka może powtarzać błędne przekierowanie po poprawce. Po każdej zmianie wyczyść LSCache (we wtyczce LiteSpeed Cache opcja Purge All, zob. LiteSpeed Cache krok po kroku), CDN i dane witryny w przeglądarce.
Gdy po zalogowaniu wracasz na ekran logowania, ciasteczko logowania zwykle zapisało się dla innej wersji adresu (http lub https, z www lub bez) niż ta, pod którą otwiera się kokpit. Ustaw ten sam adres w WordPressie i w panelu hostingu, usuń ciasteczka witryny i zaloguj się ponownie. Za proxy lub CDN, które łączy się z serwerem przez HTTP, kokpit potrafi zapętlić stała FORCE_SSL_ADMIN - dokumentacja WordPressa ostrzega przed tym wprost.
Bez dostępu do kokpitu WordPressa naprawisz pętlę, edytując pliki przez FTP lub menedżer plików w panelu hostingu i poprawiając adresy w bazie przez phpMyAdmin. Po każdym kroku sprawdzaj wynik curlem albo w oknie prywatnym:
wp-config.php i .htaccess, wyeksportuj bazę..htaccess zostaw jedną regułę HTTPS albo żadną, jeśli HTTPS wymusza panel; blok od # BEGIN WordPress do # END WordPress zostaw bez zmian.wp-content/plugins (np. dopisz -off), a WordPress ją dezaktywuje. Gdy nie wiesz, która to, zmień nazwę całego katalogu plugins.WP_HOME i WP_SITEURL z przykładu wyżej (mają pierwszeństwo przed bazą) albo popraw siteurl i home w tabeli wp_options w phpMyAdmin.Zapytania dla zakładki SQL w phpMyAdmin - pierwsze pokazuje obecne adresy, drugie je zmienia (inny prefiks tabel niż wp_ sprawdzisz w zmiennej $table_prefix w wp-config.php):
SELECT option_name, option_value FROM wp_options
WHERE option_name IN ('siteurl', 'home');
UPDATE wp_options SET option_value = 'https://twojadomena.pl'
WHERE option_name IN ('siteurl', 'home');
Połączenie przez FTP pokazuje poradnik FTP i FileZilla krok po kroku, a eksport i import bazy - wpis baza danych MySQL - phpMyAdmin, import i eksport.
Pętli unikniesz, gdy HTTPS i wersję adresu wymuszasz w jednym miejscu, a każdą zmianę przekierowań od razu testujesz.
Jeśli porządkujesz przekierowania przy przeprowadzce, możesz ją zlecić nam: na hostingu McProdukt bezpłatną migrację strony, sklepu i poczty robimy za Ciebie, a każdy pakiet przetestujesz przez 14 dni bez płatności (raz na konto). Automatyczne kopie plików i baz danych przywrócisz z panelu, gdyby zmiana konfiguracji poszła nie tak.
Zwykle strony - według dokumentacji MDN pętla to najczęściej problem serwera. Po Twojej stronie winne mogą być tylko ciasteczka lub pamięć przeglądarki; jeśli strona działa w oknie prywatnym, usuń dane tej witryny.
Jeśli serwer sam przekierowuje na HTTPS, zmień w ustawieniach SSL/TLS tryb Flexible na Full lub Full (strict) - wymaga to certyfikatu na serwerze. Potem sprawdź, czy reguły przekierowań i opcja Always Use HTTPS nie kolidują z regułami serwera.
Może zaszkodzić, bo strona w pętli jest dla robotów niedostępna. Roboty Google domyślnie podążają za najwyżej 10 przekierowaniami, a z pętli nie dochodzą do treści; Search Console zgłasza nieudane przekierowania jako błędy.
Przeglądarka może pamiętać stare przekierowanie 301 lub ciasteczka, a pamięć podręczna serwera albo CDN - starą odpowiedź. Sprawdź adres curlem lub w oknie prywatnym; jeśli tam działa, usuń dane witryny i wyczyść cache.
Każdy wariant adresu powinien dochodzić do strony po jednym, najwyżej dwóch skokach. Przeglądarki przerywają łańcuch po kilkunastu-kilkudziesięciu skokach, roboty Google po 10, ale każdy dodatkowy skok to osobne żądanie i wolniejsze wczytywanie.
W sekcji „SSL Certificates” - opcja nazywa się „Force SSL with https redirect”. Wyłącz ją, jeśli HTTPS wymuszasz w .htaccess, albo usuń regułę z pliku i zostaw panel - przekierowanie ma działać w jednym miejscu.
Wszystkie poradniki z kategorii: Szybkość i wydajność