ERR_TOO_MANY_REDIRECTS: znajdź pętlę przekierowań i ją przerwij
· 6 min czytania
Co oznacza ten błąd
Serwer odpowiada, ale zamiast strony wysyła przekierowanie (kod 301 albo 302) na inny adres, ten adres przekierowuje dalej i po około dwudziestu skokach przeglądarka się poddaje. Chrome pokazuje „Ta strona nie działa” z dopiskiem „przyklad.pl przekierowała Cię zbyt wiele razy” i kodem ERR_TOO_MANY_REDIRECTS; Firefox mówi „Strona nie przekierowuje prawidłowo”. Niemal zawsze to pętla między dwiema regułami, które nawzajem cofają swoje decyzje: HTTP na HTTPS i z powrotem, www i bez www, język, ukośnik na końcu adresu.
Serwer działa, certyfikat jest w porządku, aplikacja odpowiada; to czysto konfiguracyjny błąd, i dlatego zwykle łatwy do usunięcia, gdy już widać, kto z kim krąży.
Częste przyczyny
- Cloudflare w trybie „Flexible”. Cloudflare łączy się z serwerem po HTTP, serwer przekierowuje na HTTPS, Cloudflare znów przychodzi po HTTP. Najczęstsza pętla w ogóle.
- Proxy albo load balancer kończy TLS, a aplikacja nie widzi nagłówka
X-Forwarded-Protoi myśli, że żądanie jest nieszyfrowane, więc przekierowuje na HTTPS. Dotyczy nginx przed Apache, Traefika, paneli hostingowych. - Adres WordPressa.
siteurl/homeustawione nahttp://, a serwer wymuszahttps://(albo odwrotnie); wtyczka SSL i reguła serwera przekierowują w przeciwne strony. - Dwie reguły w
.htaccesslub nginx, które się wykluczają: jedna dodajewww, druga usuwa; jedna dodaje ukośnik, druga go zdejmuje. - Wtyczka bezpieczeństwa, wielojęzyczności albo cache, która przekierowuje według kraju, języka albo ciasteczka, którego przeglądarka nie przyjmuje.
- Przekierowanie u rejestratora domeny (tzw. forwarding) na adres, który przekierowuje z powrotem.
- Pętla ciasteczek: aplikacja przekierowuje na stronę logowania, która wymaga ciasteczka blokowanego przez przeglądarkę albo złą domenę ciasteczka.
Jeśli odwiedzasz cudzą stronę
- Usuń ciasteczka tej strony (ikona kłódki → „Pliki cookie i dane witryn” → usuń) i odśwież.
- Spróbuj w oknie prywatnym; jeśli tam działa, winne było ciasteczko albo rozszerzenie.
- Spróbuj drugiego wariantu adresu: z
wwwi bez,http://zamiasthttps://. - Jeśli nic nie pomaga, pętla jest na serwerze i tylko właściciel ją przerwie.
Jeśli to Twoja strona: najpierw sprawdź
Narzędzie Is it down? pokazuje listę przekierowań i urywa po limicie: od razu widzisz, które dwa adresy krążą. To samo z własnego komputera:
curl -sIL --max-redirs 10 https://przyklad.pl 2>&1 | grep -iE '^(HTTP|location)'
curl -sI http://przyklad.pl | grep -iE '^(HTTP|location)'
curl -sI https://www.przyklad.pl | grep -iE '^(HTTP|location)'
Czytaj parami: Location: https://przyklad.pl/ po żądaniu do https://przyklad.pl/ oznacza, że serwer przekierowuje sam na siebie, czyli nie widzi, że żądanie już jest po HTTPS (przyczyny 1 i 2). Przeskakiwanie między www a bez www to przyczyna 4. Przekierowanie na /wp-login.php albo adres z ?lang= wskazuje aplikację lub wtyczkę (3, 5, 7).
Naprawy na własnym serwerze albo hostingu z SSH
1. Cloudflare: tryb SSL
W panelu Cloudflare, SSL/TLS → Overview, ustaw „Full” albo „Full (strict)”, nigdy „Flexible” dla serwera, który sam przekierowuje na HTTPS. Jeśli serwer nie ma certyfikatu, zainstaluj go (sudo certbot --nginx -d przyklad.pl -d www.przyklad.pl) i sprawdź przez SSL checker. Wyłącz też „Always Use HTTPS”, jeśli serwer robi to samo, żeby decydowało jedno miejsce.
2. Proxy: przekaż protokół
W nginx przed aplikacją:
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $host;
W WordPressie za proxy dopisz do wp-config.php przed require_once ABSPATH . 'wp-settings.php';:
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') {
$_SERVER['HTTPS'] = 'on';
}
Laravel: TrustProxies z właściwym adresem proxy; Symfony: trusted_proxies.
3. Adres WordPressa
wp option get siteurl
wp option get home
wp option update siteurl https://przyklad.pl
wp option update home https://przyklad.pl
Oba muszą mieć ten sam protokół i tę samą formę (www albo bez), którą wymusza serwer. Bez WP-CLI ustawisz je tymczasowo w wp-config.php: define('WP_HOME','https://przyklad.pl'); define('WP_SITEURL','https://przyklad.pl');. Wyłącz wtyczkę „wymuszającą SSL”, jeśli serwer już to robi: wp plugin deactivate really-simple-ssl (albo zmiana nazwy katalogu przez SFTP).
4. Jedna reguła zamiast dwóch
Przejrzyj .htaccess i konfigurację nginx pod kątem przekierowań:
grep -nE 'Redirect|RewriteRule|RewriteCond' /var/www/przyklad.pl/.htaccess
sudo nginx -T | grep -nE 'return 30[12]|rewrite'
Zostaw jedno miejsce, które decyduje o HTTPS i www. Poprawny wzorzec dla nginx:
server {
listen 80;
server_name przyklad.pl www.przyklad.pl;
return 301 https://przyklad.pl$request_uri;
}
Apache: jedna para RewriteCond %{HTTPS} off / RewriteRule ^ https://przyklad.pl%{REQUEST_URI} [L,R=301], bez drugiej reguły, która dodaje www. Po zmianie: sudo nginx -t && sudo systemctl reload nginx albo sudo apachectl configtest && sudo systemctl reload apache2.
5. Wtyczki i ciasteczka
Wyłącz po kolei wtyczki przekierowujące (wielojęzyczne, geolokalizacja, cache, logowanie) i sprawdzaj curl -sIL po każdej. Pętla na stronie logowania zwykle znika po wyczyszczeniu cache obiektów i ustawieniu COOKIE_DOMAIN zgodnie z rzeczywistą domeną.
6. Przekierowanie u rejestratora
Jeśli domena ma u rejestratora „przekierowanie URL” na www.przyklad.pl, a serwer przekierowuje z www na nagą domenę, krąg się zamyka. Wyłącz forwarding i ustaw zwykłe rekordy A/CNAME.
Gdy to problem dostawcy hostingu
Na hostingu panel dostawcy potrafi sam wymuszać HTTPS, a do tego Cloudflare albo wtyczka. Wyślij:
Dzień dobry, moja strona przyklad.pl pokazuje ERR_TOO_MANY_REDIRECTS od około 13:20 UTC. curl pokazuje pętlę między wersją http a https tego samego adresu. Czy Państwa serwer lub panel wymusza przekierowanie na HTTPS albo na www dla mojego konta i czy coś w tej konfiguracji zmieniło się dzisiaj?
Jak zapobiec następnemu
Pętla przekierowań pojawia się po zmianie ustawień, nie sama z siebie: nowa wtyczka, włączony Cloudflare, migracja na HTTPS. Sprawdzanie HTTP w monitoringu stron podąża za przekierowaniami i wysyła alert, gdy ich liczba przekroczy limit, więc dowiadujesz się w ciągu minut. Awaria? Naprawiamy: Quick Fix poprawia drobne błędy konfiguracji po teście i z kopią zapasową w stałej cenie; adresy WordPressa, proxy i reguły w .htaccess porządkuje Deep Fix. Zobacz naprawa serwera i naprawa WordPressa na żądanie. Pokrewny problem z pośrednikiem: błąd 521 i 522 w Cloudflare.
Co teraz
Sprawdź z zewnątrz
Strona nie działa u wszystkich czy tylko u Ciebie i co odpowiada serwer? Za darmo, bez rejestracji.
Is it down? Sprawdź, czy strona działaAwaria? Naprawiamy.
Na Twoim własnym serwerze albo na hostingu z dostępem SSH: Quick Fix w stałej cenie na częste przyczyny, Deep Fix rozliczany w blokach po 15 minut na resztę, przez całą dobę. Cena przed zamówieniem.
Zamów naprawęWięcej poradników
- Strona nie działa: co zrobić w pierwszych 15 minutach
- Awaria serwera: co sprawdzić i w jakiej kolejności
- Błąd 500 Internal Server Error: znajdź przyczynę w logach i przywróć stronę
- Błąd 502 Bad Gateway: znajdź przyczynę i napraw
- Błąd 503: przeciążenie, konserwacja czy limit hostingu?
- Błąd 504 Gateway Timeout: znajdź, co spowalnia stronę
- Błąd 521 i 522 w Cloudflare: serwer źródłowy nie odpowiada
- DNS_PROBE_FINISHED_NXDOMAIN: domena przestała odpowiadać
- ERR_CONNECTION_REFUSED: serwer odrzuca połączenie
- ERR_CONNECTION_TIMED_OUT: serwer nie odpowiada na czas
- Co oznacza „Połączenie nie jest prywatne” i jak to naprawić
- ERR_SSL_PROTOCOL_ERROR: bezpieczne połączenie zawodzi przed certyfikatem
- Błąd 403 Forbidden: co blokuje dostęp do Twojej strony
- ERR_NAME_NOT_RESOLVED: nie można znaleźć nazwy strony
- „Błąd podczas nawiązywania połączenia z bazą danych” w WordPressie: przyczyna i naprawa
- ERR_CONNECTION_RESET: dlaczego połączenie zrywa się w połowie
- Błąd 429 Too Many Requests: który limit blokuje odwiedzających
- ERR_EMPTY_RESPONSE: serwer nie wysłał żadnych danych
- Błąd krytyczny WordPress: znajdź przyczynę i przywróć stronę