Pętla przekierowań (ERR_TOO_MANY_REDIRECTS): przyczyny i naprawa

Strona się nie otwiera, a przeglądarka pisze o zbyt wielu przekierowaniach? Pokazujemy, jak ustalić, które reguły się zapętlają, i jak to naprawić.

Aktualizacja: Zespół Search Experts

Ilustracja: dwa drogowskazy wskazujące na siebie nawzajem, a między nimi strzałka krążąca w kółko
Spis treści
  1. Krótka odpowiedź: co to jest pętla przekierowań
  2. Jak wygląda ten błąd w przeglądarce
  3. Najczęstsze przyczyny
  4. Jak znaleźć przyczynę krok po kroku
  5. Jak naprawić pętlę w zależności od przyczyny
  6. Co z pętlą robi Google
  7. Kiedy oddać to specjaliście

Strona się zapętla, a Ty nie wiesz, która reguła za to odpowiada?

Opisz problem

Krótka odpowiedź: co to jest pętla przekierowań

Pętla przekierowań to sytuacja, w której adres A kieruje na B, a B z powrotem na A (albo przez kilka kolejnych adresów wraca do punktu wyjścia). Przeglądarka po pewnej liczbie skoków przerywa wczytywanie i pokazuje błąd, w Chrome z kodem ERR_TOO_MANY_REDIRECTS. Kto trafi w pętlę, klient czy robot Google, nie dotrze do strony.

Winne są ustawienia, które sobie przeczą, często w różnych miejscach: na serwerze, we wtyczce, w panelu sklepu albo w Cloudflare. Naprawa polega na znalezieniu tej sprzeczności i jej usunięciu.

Jak wygląda ten błąd w przeglądarce

W polskiej wersji Chrome zobaczysz komunikat „Strona twojadomena.pl spowodowała zbyt wiele przekierowań”, a pod nim kod ERR_TOO_MANY_REDIRECTS i podpowiedź „Usuń pliki cookie”.

Firefox pisze: „Firefox wykrył, że serwer przekierowuje żądanie tego zasobu w sposób uniemożliwiający jego ukończenie” i dodaje, że problem może wynikać z zablokowania lub odrzucenia ciasteczek.

Obie przeglądarki wspominają pliki cookie, bo czasem pętlę wywołuje zapisane ciasteczko, na przykład po zmianie ustawień logowania albo języka. Często jednak przyczyna leży po stronie serwera i wtedy błąd widzą także inni odwiedzający.

Najczęstsze przyczyny

Cloudflare w trybie Flexible, serwer wymusza https

https://Cloudflare pyta serwer po httpserwer odsyła na httpshttps://

Cloudflare w tym trybie łączy się z serwerem po http, więc serwer za każdym razem widzi „niezabezpieczone” zapytanie.

Dwie reguły o www w różnych miejscach

domena.plwww.domena.pldomena.pl

Na przykład serwer dodaje www, a reguła w CDN albo wtyczka je usuwa.

Po poprawce

http://domena.plhttps://domena.pl

Jedna reguła dla jednej zmiany, jedno przekierowanie i strona, która odpowiada kodem 200.

Pętla powstaje, gdy ustawienia w różnych miejscach odsyłają się nawzajem. Naprawa polega na usunięciu tej sprzeczności.

Cloudflare i tryb szyfrowania „Flexible”

To jedna z najczęstszych przyczyn po podłączeniu strony do Cloudflare. W trybie Flexible Cloudflare łączy się z Twoim serwerem przez zwykłe http (dotyczy https na standardowym porcie 443). Jeśli serwer albo wtyczka przekierowuje każde zapytanie http na https, odsyła Cloudflare na https, Cloudflare znowu pyta po http i tak w kółko. Dokumentacja Cloudflare mówi wprost: gdy serwer wymusza https, nie używaj trybu Flexible.

Odwrotny przypadek też istnieje. W trybie Full albo Full (strict), przy włączonej opcji Always Use HTTPS albo HSTS pętla pojawia się, gdy serwer przekierowuje z https na http.

Sprzeczne reguły o www i https

Przekierowanie na wersję z www albo bez www i z http na https ustawia się zwykle raz. Kłopot zaczyna się, gdy ta sama zmiana jest ustawiona w dwóch miejscach z różnym celem: na przykład w pliku .htaccess serwer dodaje www, a reguła przekierowania w Cloudflare je usuwa. Cloudflare wymienia sprzeczne reguły przekierowań jako osobną przyczynę pętli.

Adres strony w ustawieniach WordPressa

WordPress ma w ustawieniach ogólnych dwa pola: „Adres WordPressa (URL)” i „Adres witryny (URL)”. Jeśli wpisany tam adres różni się od tego, na który kieruje serwer (inna wersja www albo http zamiast https), WordPress i serwer mogą zacząć przerzucać się odwiedzającym.

WordPress za proxy, które obsługuje https

Gdy certyfikat działa na serwerze pośredniczącym (proxy, CDN), a sam WordPress dostaje zapytania po http, dokumentacja WordPressa ostrzega, że wymuszenie SSL wpada wtedy w nieskończoną pętlę przekierowań. WordPress nie wie, że odwiedzający jest już na https, i przekierowuje go ponownie.

Wtyczki i pamięć podręczna

Wtyczki do przekierowań, wymuszania SSL, bezpieczeństwa i wielojęzyczności potrafią dodawać własne reguły obok tych z serwera. Wtyczka pamięci podręcznej albo cache w CDN może też dalej podawać stare przekierowanie, mimo że regułę już poprawiłeś.

Jak znaleźć przyczynę krok po kroku

  1. Sprawdź, czy błąd widzą inni. Otwórz stronę w oknie prywatnym albo w innej przeglądarce. Jeśli tam działa, zacznij od usunięcia plików cookie dla tej domeny. Jeśli nie działa nigdzie, problem jest najpewniej po stronie serwera.
  2. Zobacz każdy krok pętli. Najszybciej zrobi to programista albo firma hostingowa poleceniem curl (przykład niżej). W przeglądarce otwórz narzędzia dla programistów, zakładkę Network, zaznacz „Preserve log”, żeby lista nie znikała przy kolejnych przekierowaniach, i „Disable cache”, żeby wynik nie pochodził z pamięci podręcznej przeglądarki. Kolumna Status pokaże kody przekierowań, na przykład 301, 302, 307 albo 308, a w szczegółach każdego zapytania (nagłówek location) widać, dokąd kieruje.
  3. Ustal, które adresy się powtarzają. Jeśli pętla skacze między http a https, szukaj w ustawieniach SSL (serwer, Cloudflare, wtyczka). Jeśli między wersją z www i bez www, szukaj reguł o domenie. Jeśli między dwoma różnymi podstronami, sprawdź reguły dla tych adresów we wtyczce do przekierowań, w panelu sklepu, na serwerze i w CDN.
  4. Wypisz wszystkie miejsca z regułami. Plik .htaccess albo konfiguracja nginx, panel hostingu, Cloudflare (tryb szyfrowania, Always Use HTTPS, Redirect Rules i Page Rules), wtyczki, ustawienia adresu w CMS.
  5. Wyłączaj po kolei. Zacznij od wtyczek. W WordPressie bez dostępu do panelu możesz wyłączyć naraz wszystkie zwykłe wtyczki, zmieniając przez FTP nazwę folderu wp-content/plugins na plugins_old (wtyczek z folderu mu-plugins to nie wyłączy). Jeśli strona zadziała, zaloguj się do panelu i otwórz stronę Wtyczki, żeby WordPress oznaczył je jako wyłączone. Potem przywróć nazwę folderu i włączaj wtyczki pojedynczo, aż błąd wróci.

Polecenie, które pokazuje kolejne kody odpowiedzi i adresy docelowe:

curl -sIL --max-redirs 15 https://twojadomena.pl/ | grep -iE "^HTTP|^location"

Opcja -I pobiera same nagłówki, a -L każe iść za przekierowaniami. Bez --max-redirs curl zatrzymuje się dopiero po 50 krokach. Jeśli w liniach location te same adresy wracają na zmianę, masz pętlę i od razu widzisz, między którymi wersjami adresu skacze.

Jak naprawić pętlę w zależności od przyczyny

  • Cloudflare w trybie Flexible. W ustawieniach SSL/TLS w Cloudflare zmień tryb szyfrowania na Full albo Full (strict). Tryb Full wymaga certyfikatu SSL na Twoim serwerze, więc najpierw upewnij się u hostingodawcy, że go masz. Full (strict) wymaga ponadto, żeby certyfikat był ważny, obejmował Twoją domenę i pochodził od zaufanego wystawcy albo z Cloudflare Origin CA. Druga droga z dokumentacji Cloudflare to usunięcie przekierowania na https z serwera, ale wtedy połączenie między Cloudflare a serwerem zostaje nieszyfrowane.
  • Full albo Full (strict) z przekierowaniem na http. Usuń z serwera regułę, która kieruje z https na http.
  • Sprzeczne reguły www i https. Zdecyduj, gdzie mają działać przekierowania (serwer albo Cloudflare), i usuń duplikaty z pozostałych miejsc. Docelowo każdy wariant adresu ma trafiać jednym krokiem na wersję końcową.
  • Zły adres w ustawieniach WordPressa. Wpisz w obu polach adres z tą samą wersją domeny co docelowa (z www albo bez), z https:// i bez ukośnika na końcu. Zwykle oba pola mają ten sam adres, chyba że WordPress stoi w podkatalogu. Gdy nie możesz wejść do panelu, dokumentacja WordPressa pozwala ustawić adres w pliku wp-config.php. Pola w ustawieniach przestaną wtedy być edytowalne.
define( 'WP_HOME', 'https://twojadomena.pl' );
define( 'WP_SITEURL', 'https://twojadomena.pl' );
  • WordPress za proxy z https. Dokumentacja WordPressa podaje fragment do wp-config.php, dzięki któremu WordPress rozpoznaje, że odwiedzający jest na https, na podstawie nagłówka przekazanego przez proxy. Wklej go, podobnie jak stałe WP_HOME i WP_SITEURL, nad linią z komentarzem „That's all, stop editing!”, bo kod dopisany na końcu pliku nie zadziała. Proxy musi ten nagłówek wysyłać (w nginx: proxy_set_header X-Forwarded-Proto $scheme;).
if( strpos( $_SERVER['HTTP_X_FORWARDED_PROTO'], 'https') !== false )
    $_SERVER['HTTPS'] = 'on';
  • Wtyczka. Gdy znajdziesz winną wtyczkę, usuń z niej regułę, która dubluje ustawienia serwera, albo zostaw przekierowania tylko w jednym narzędziu.
  • Pamięć podręczna. Po każdej zmianie wyczyść cache wtyczki i CDN, a sprawdzaj w oknie prywatnym albo poleceniem curl, żeby nie oglądać starej wersji.

Co z pętlą robi Google

Google podaje, że jego roboty domyślnie śledzą do 10 kolejnych przekierowań. Pętla nie kończy się nigdy, więc Googlebot nie dociera do treści i adres nie trafia do indeksu.

W Search Console taki adres może pojawić się w raporcie Indeksowanie stron ze statusem „Błąd przekierowania”. Według pomocy Google ten status obejmuje zbyt długi łańcuch przekierowań, pętlę przekierowań, przekierowanie, które przekroczyło maksymalną długość adresu URL, oraz nieprawidłowy lub pusty adres w łańcuchu. Nie myl go ze statusem „Strona zawierająca przekierowanie”, który zwykle oznacza poprawne przekierowanie. Różnicę opisujemy w tekście o statusie „Strona zawierająca przekierowanie”.

Po naprawie otwórz status „Błąd przekierowania” w raporcie i kliknij „Sprawdź poprawkę”. Google ponownie odwiedzi adresy z listy. Kiedy planujesz nowe przekierowania, ustaw je tak, żeby każdy stary adres prowadził jednym krokiem do celu. Więcej o tym w tekście o przekierowaniu 301.

Kiedy oddać to specjaliście

Jeśli po wyłączeniu wtyczek i sprawdzeniu ustawień Cloudflare strona nadal się zapętla albo pętla pojawiła się po migracji, zmianie domeny czy przejściu na https, opisz nam problem: przejdziemy każdy krok przekierowania i wskażemy regułę do usunięcia.

Opisz problem

Kiedy potrzebny jest specjalista

Strona się zapętla, a Ty nie wiesz, która reguła za to odpowiada? Opisz, co widzisz, a wskażemy przyczynę i powiemy, co poprawić.

Opisz problem

Chcesz zlecić całość? Jak przeprowadzamy migrację

Najczęstsze pytania

Co oznacza błąd ERR_TOO_MANY_REDIRECTS?

To kod błędu Chrome, który pojawia się, gdy wczytanie adresu wymaga zbyt wielu przekierowań. Oznacza to pętlę, w której adresy odsyłają się nawzajem i przeglądarka nigdy nie dociera do strony, albo zbyt długi łańcuch przekierowań.

Czy usunięcie plików cookie naprawi pętlę przekierowań?

Tylko wtedy, gdy pętlę wywołało zapisane ciasteczko. Sprawdź stronę w oknie prywatnym albo w innej przeglądarce. Jeśli tam też się zapętla, przyczyna leży najpewniej na serwerze i czyszczenie plików cookie nic nie zmieni.

Dlaczego pętla pojawiła się po podłączeniu Cloudflare?

Często przez tryb szyfrowania Flexible. Cloudflare łączy się wtedy z serwerem po http, a serwer odsyła na https. Cloudflare zaleca w takiej sytuacji tryb Full albo Full (strict), który wymaga certyfikatu SSL na serwerze.

Jak naprawić pętlę w WordPressie, gdy nie mogę wejść do panelu?

Przez FTP zmień nazwę folderu wp-content/plugins na plugins_old, co wyłączy wszystkie zwykłe wtyczki (bez mu-plugins). Jeśli to nie pomoże, ustaw poprawny adres strony stałymi WP_HOME i WP_SITEURL w pliku wp-config.php.

Ile przekierowań wytrzyma Google?

Roboty Google domyślnie śledzą do 10 kolejnych przekierowań. Pętla nie kończy się nigdy, więc adres nie zostanie zindeksowany, a w Search Console może dostać status „Błąd przekierowania”.

Czy pętla przekierowań szkodzi widoczności w Google?

Tak. Dopóki pętla trwa, Googlebot nie dociera do treści, a Search Console może pokazywać adres w grupie niezindeksowanych. Po naprawie kliknij w Search Console „Sprawdź poprawkę” przy statusie „Błąd przekierowania”, żeby Google ponownie odwiedził te adresy.

Przeczytaj też

Źródła