ERR_TOO_MANY_REDIRECTS: co způsobuje smyčku a jak ji opravit
ERR_TOO_MANY_REDIRECTS znamená, že prohlížeč sledoval řetězec přesměrování, který se nikdy nedostal na konečnou stránku, a vzdal to. Chrome a většina ostatních prohlížečů se zastaví po zhruba 20 skocích, a nejčastější příčinou je smyčka HTTP na HTTPS vytvořená proxy nebo CDN, které se s originem neshodnou na tom, jaký protokol se používá.
Co znamená ERR_TOO_MANY_REDIRECTS
Přesměrování řekne prohlížeči "stránka, kterou chceš, je jinde, jdi tam místo toho". Jedno přesměrování, nebo dokonce dvě nebo tři v řadě, je normální: holá doména přesměrovávající na www, nebo stará URL přesměrovávající na svou náhradu. Smyčka nastane, když se URL přesměruje na druhou URL, která se přesměruje zpátky na první, nebo na sebe samu. Protože se prohlížeč nikdy nedostane na stránku, která skutečně vrátí obsah, řetězec přeruší a místo věčného čekání zobrazí chybu.
Jak se chyba projevuje
Chrome a Edge zobrazí "This page isn't working - redirected you too many times" s chybovým kódem ERR_TOO_MANY_REDIRECTS. Firefox zobrazí "The page isn't redirecting properly." Safari říká "Safari can't open the page because too many redirects occurred."
curl s přepínačem -L sleduje přesměrování stejně jako prohlížeč, a vypsání každého skoku přesně ukáže, kde se smyčka opakuje:
curl -sIL https://example.com/ | grep -E "^(HTTP|location)"
HTTP/1.1 301 Moved Permanently
location: http://example.com/
HTTP/1.1 301 Moved Permanently
location: https://example.com/
HTTP/1.1 301 Moved Permanently
location: http://example.com/
Tenhle vzor, http na https a zpátky na http, je jednoznačně nejčastější podoba téhle chyby. curl se sám zastaví na svém výchozím limitu (50 přesměrování) místo aby ji sledoval navěky, a opakující se řádky location udělají smyčku zjevnou bez nutnosti vůbec otevírat prohlížeč.
Co způsobuje smyčku přesměrování
- Nesoulad HTTP a HTTPS mezi proxy nebo CDN a originem. Tohle je klasický případ. Pokud je režim SSL/TLS Cloudflare nastavený na Flexible, Cloudflare ukončuje TLS na edge a k originu se připojuje obyčejným HTTP. Pokud origin server taky má pravidlo, které přesměrovává každý požadavek HTTP na HTTPS (běžné bezpečnostní výchozí nastavení), origin pošle prohlížeč zpátky na HTTPS, Cloudflare zase při dalším skoku downgraduje na HTTP, a obě nastavení spolu bojují navěky.
- Pravidla pro www a bez www mířící proti sobě. Jedno pravidlo přesměruje holou doménu na www a samostatné pravidlo, často přidané později jiným administrátorem nebo pluginem, přesměruje www zpátky na holou doménu.
- Nesoulad
siteurlnebohomeve WordPressu. Pokud nastavená URL webu v databázi neodpovídá URL, kterou návštěvníci skutečně používají (pozůstalá staging URL, nesoulad schématu po přidání SSL), WordPress se dál přesměrovává směrem k nastavené hodnotě. - Cookies, které server očekává, ale nikdy nedostane, nebo přihlašovací přesměrování, které potichu selže. Stránka, která nepřihlášené návštěvníky přesměruje na krok přihlášení, jenž se pak přesměruje zpátky na stejnou stránku, protože se nikdy nenastavila cookie relace (často zablokovaná pravidly prohlížeče pro cookies třetích stran nebo chybějícím atributem
Secure/SameSite), se zacyklí donekonečna. - Konfliktní pravidla pro koncové lomítko nebo jazykový prefix. Jedno pravidlo přidá koncové lomítko, jiné ho odstraní; jedno pravidlo přidá jazykový prefix podle jazyka prohlížeče, jiné ho odstraní kvůli kanonickým URL, a obě se vzájemně ruší.
- Vrstva cachování obsluhující zastaralé přesměrování. CDN nebo reverzní proxy má cachovanou starou 301, která mířila na URL, jež se od té doby změnila a přesměrovává se zpátky na původní.
Jak zjistit, čí je to chyba
Pokud se smyčka projevuje u každého návštěvníka na každé síti, jde o problém konfigurace serveru nebo CDN, ne o něco lokálního. Pokud se to děje jen vám, nejdřív vymažte cookies pro daný web, protože velkou část smyček u jednoho návštěvníka způsobuje špatná nebo vypršelá cookie relace. Spuštění HTTP kontroly z několika míst to vyřeší jedním požadavkem: pokud se stejný řetězec přesměrování (nebo stejné selhání) objeví z každého místa, oprava je na straně serveru.
Jak opravit ERR_TOO_MANY_REDIRECTS
Pokud jste návštěvník
- Vymažte cookies pro daný web. V Chrome klikněte na ikonu zámku nebo nastavení vedle adresního řádku, otevřete nastavení webu a vymažte cookies a data webu jen pro tuhle doménu.
- Zkuste anonymní okno. Tím vyloučíte rozšíření prohlížeče nebo uloženou cookie jako příčinu, aniž byste se dotkli svého běžného profilu.
- Zkuste jinou síť, například mobilní data místo Wi-Fi. Některé firemní proxy nebo proxy na úrovni poskytovatele internetu přepisují požadavky způsobem, který smyčku vytvoří jen na té síti.
- Vymažte cache prohlížeče pro případ, že se cachovala přímo odpověď přesměrování ze stavu předtím, než byl web opraven.
Pokud web provozujete
- Porovnejte režim SSL svého CDN s pravidlem přesměrování na originu. V Cloudflare otevřete SSL/TLS a nastavte režim na Full nebo Full (strict), ne Flexible, kdykoli origin přesměrovává HTTP na HTTPS. Full pořád umožňuje originu používat certifikát podepsaný sám sebou; Full (strict) vyžaduje platný.
- Důvěřujte hlavičce předaného protokolu, místo abyste přesměrovávali naslepo. Když je před vaší aplikací proxy, origin musí přesměrovávat na základě
X-Forwarded-Proto, ne na základě surového spojení, které za proxy vždy vypadá jako HTTP. Na nginx:
a ujistěte se, že CDN nebo load balancer tuhle hlavičku skutečně nastavuje u každého požadavku.if ($http_x_forwarded_proto = "http") { return 301 https://$host$request_uri; } - Projděte svá pravidla přesměrování v pořadí, včetně
.htaccess, blokůserverv nginx, middleware na úrovni aplikace, a jakýchkoli pravidel stránek CDN, kvůli dvěma pravidlům, která na sebe míří navzájem. Běžný vzor Apache, který se za proxy zacyklí:
selže stejně jako případ nginx výše, protožeRewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]%{HTTPS}čte spojení, které vytváří proxy, ne to, které vytvořil návštěvník; místo toho zkontrolujte%{HTTP:X-Forwarded-Proto}. - Opravte URL webu ve WordPressu, pokud se to týká vás: v
wp-admin > Settings > Generalověřte, že WordPress Address i Site Address odpovídají URL, kterou návštěvníci skutečně používají, včetně protokolu. Pokud je samotný panel administrace kvůli smyčce nedostupný, nastavteWP_HOMEaWP_SITEURLpřímo vwp-config.php. - Vyberte jednu kanonickou formu a všechno ostatní na ni přesměrujte jednou, ne v řetězci: www nebo bez www, koncové lomítko nebo bez něj, jedno pravidlo na rozhodnutí místo několika pravidel navrstvených postupem času různými nástroji.
- Vyčistěte cache CDN po opravě pravidla, protože cachovaná 301 nebo 302 dál posílá starou odpověď, dokud nevyprší nebo se nevyčistí.
Související chyby
- Stavové kódy přesměrování 3xx vysvětluje, co znamená každý z kódů 301, 302, 303, 307 a 308.
- 301 vs 302 pokrývá, kdy má být přesměrování trvalé, a kdy dočasné, na čemž záleží pro vyhledávače i cachování, ne jen pro smyčky.
Jak předejít ERR_TOO_MANY_REDIRECTS
Smyčku přesměrování téměř vždy zavede změna konfigurace: nová CDN, nový SSL certifikát, aktualizace pluginu, nebo migrace, která se dotkla URL webu. HTTP kontrola, která podle plánu sleduje kód odpovědi a sleduje přesměrování, zachytí smyčku ve chvíli, kdy se objeví, z více než 300 kontrolních bodů ve 158 městech, místo aby čekala na tiket podpory. HostTracker monitoruje weby od roku 2004 a může upozornit e-mailem, SMS, hlasovým hovorem, přes Slack, Telegram a další ve chvíli, kdy kontrola začne selhávat.
Často kladené otázky
Kolik přesměrování prohlížeč povolí, než to vzdá?
Chrome a prohlížeče založené na Chromiu se zastaví na zhruba 20. Výchozí limit curl s -L je 50. Přesné číslo se liší podle klienta, ale kterýkoli z nich se nakonec zastaví, místo aby smyčku sledoval navěky.
Proč se smyčka objevila zrovna hned po přechodu na Cloudflare (nebo jinou CDN)?
Skoro vždy jde o režim SSL/TLS. Režim Flexible mluví s originem obyčejným HTTP; pokud origin trvá na HTTPS, obě strany se navzájem přesměrovávají donekonečna. Přepnutí na Full nebo Full (strict) to obvykle okamžitě vyřeší.
Může tohle způsobit rozšíření prohlížeče?
Ano, zvlášť rozšíření, která vynucují HTTPS, přepisují požadavky, nebo spravují cookies. Test v anonymním okně s vypnutými rozšířeními to rychle vyloučí.
Ovlivňuje tohle SEO?
Ano. Roboti vyhledávačů se u smyčky přesměrování vzdají stejně jako prohlížeč, a zacyklená URL se nezaindexuje, nebo z indexu vypadne, pokud dřív fungovala.
Chybu vidím jen na jedné konkrétní stránce, ne na celém webu. Co je na ní jiné?
Hledejte pravidlo specifické pro danou stránku: stránku vyžadující přihlášení, cachované staré přesměrování pro zrovna tuhle URL, nebo nesoulad koncového lomítka, který existuje jen na téhle trase. Porovnejte přesný řetězec přesměrování pro danou URL s funkční stránkou pomocí curl -sIL.
Je jedno přesměrování (například z bez www na www) něco, co je potřeba opravit?
Ne, jedno přesměrování samo o sobě je normální a očekávané. Problém, který tahle chyba popisuje, je jen opakující se řetězec, který se nikdy nedostane ke konečné odpovědi 200.