Ana içeriğe geç

Rehberler / Düzeltin: insanların gerçekten karşılaştığı hatalar için rehberler

ERR_TOO_MANY_REDIRECTS: Bir Yönlendirme Döngüsüne Ne Sebep Olur

ERR_TOO_MANY_REDIRECTS, tarayıcının hiçbir zaman son bir sayfaya ulaşmayan bir yönlendirme zincirini takip ettiği ve vazgeçtiği anlamına gelir. Chrome ve çoğu diğer tarayıcı yaklaşık 20 sıçramadan sonra durur, ve en yaygın neden, kaynak sunucuyla hangi protokolün kullanıldığı konusunda anlaşamayan bir proxy veya CDN tarafından oluşturulan bir HTTP-HTTPS döngüsüdür.

ERR_TOO_MANY_REDIRECTS ne anlama gelir

Bir yönlendirme tarayıcıya "istediğiniz sayfa başka bir yerde, bunun yerine oraya gidin" der. Tek bir yönlendirme, hatta sırayla iki veya üç bile normaldir: www'ye ileten çıplak bir alan adı, veya yerine ileten eski bir URL. Bir döngü, bir URL ikinci bir URL'ye yönlendirdiğinde ve o URL geri birinciye, veya kendisine yönlendirdiğinde olur. Tarayıcı hiçbir zaman gerçekten içerik döndüren bir sayfaya ulaşmadığından, sonsuza kadar takılmak yerine zinciri keser ve hatayı gösterir.

Hata nasıl görünür

Chrome ve Edge, ERR_TOO_MANY_REDIRECTS hata koduyla "This page isn't working - redirected you too many times" gösterir. Firefox, "The page isn't redirecting properly" gösterir. Safari, "Safari can't open the page because too many redirects occurred" der.

-L bayrağıyla curl, bir tarayıcının yaptığı gibi yönlendirmeleri takip eder, ve her sıçramayı yazdırmak, döngünün tam olarak nerede tekrarlandığını gösterir:

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/

Bu kalıp, http'den https'e ve geri http'ye, bu hatanın aldığı en yaygın tek şekildir. curl, sonsuza kadar takip etmek yerine kendi varsayılan sınırında (50 yönlendirme) durur, ve tekrarlanan location satırları, hiç tarayıcı açmaya gerek kalmadan döngüyü açık hale getirir.

Bir yönlendirme döngüsüne ne sebep olur

  • Bir proxy veya CDN ile kaynak arasında bir HTTP-HTTPS uyuşmazlığı. Bu klasik durumdur. Cloudflare'in SSL/TLS modu Flexible olarak ayarlıysa, Cloudflare TLS'i kenarda sonlandırır ve kaynağa düz HTTP üzerinden bağlanır. Kaynak sunucunun da her HTTP isteğini HTTPS'e yönlendiren bir kuralı varsa (yaygın bir güvenlik varsayılanı), kaynak tarayıcıyı HTTPS'e geri gönderir, Cloudflare bir sonraki sıçramada tekrar HTTP'ye düşürür, ve iki ayar sonsuza kadar savaşır.
  • Birbirine işaret eden www ve www olmayan kurallar. Bir kural çıplak alan adını www'ye yönlendirir, ve genellikle daha sonra farklı bir yönetici veya eklenti tarafından eklenen ayrı bir kural www'yi geri çıplak alan adına yönlendirir.
  • Bir WordPress siteurl veya home uyuşmazlığı. Veritabanındaki sitenin yapılandırılmış URL'si, ziyaretçilerin gerçekte kullandığı URL ile eşleşmiyorsa (kalıntı bir hazırlık URL'si, SSL eklendikten sonra bir şema uyuşmazlığı), WordPress yapılandırılmış değere doğru yönlendirmeye devam eder.
  • Sunucunun beklediği ama hiç almadığı çerezler, veya sessizce başarısız olan bir giriş yönlendirmesi. Kimliği doğrulanmamış ziyaretçileri bir giriş adımına yönlendiren bir sayfa, ki bu sonra aynı sayfaya geri yönlendirir çünkü oturum çerezi hiç ayarlanmadı (genellikle bir tarayıcının üçüncü taraf çerez kuralları veya eksik bir Secure/SameSite özniteliği tarafından engellenir), sonsuza kadar döngü yapar.
  • Çelişen sondaki eğik çizgi veya dil ön eki kuralları. Bir kural bir sondaki eğik çizgi ekler, diğeri onu çıkarır; bir kural tarayıcı yereline göre bir dil ön eki ekler, diğeri kanonik URL'ler için onu çıkarır, ve ikisi birbirini iptal eder.
  • Eski bir yönlendirmeyi sunan bir önbellekleme katmanı. Bir CDN veya ters proxy, o zamandan beri değişmiş ve geri orijinaline yönlendiren bir URL'ye işaret eden eski bir 301'i önbelleğe aldı.

Kimin hatası olduğunu nasıl anlarsınız

Döngü her ağdaki her ziyaretçi için oluyorsa, yerel bir şey değil sunucu veya CDN yapılandırma sorunudur. Sadece sizin için oluyorsa, önce site için çerezleri temizleyin, çünkü kötü veya süresi dolmuş bir oturum çerezi tek ziyaretçili döngülerin büyük bir kısmına neden olur. Birden fazla konumdan bir HTTP kontrolü çalıştırmak bunu tek bir istekte çözer: aynı yönlendirme zinciri (veya aynı başarısızlık) her konumdan görünüyorsa, düzeltme sunucu tarafındadır.

ERR_TOO_MANY_REDIRECTS nasıl düzeltilir

Bir ziyaretçiyseniz

  1. Site için çerezleri temizleyin. Chrome'da, adres çubuğunun yanındaki asma kilit veya ayar simgesine tıklayın, site ayarlarını açın, ve sadece o alan adı için çerezleri ve site verilerini temizleyin.
  2. Gizli veya özel bir pencere deneyin. Bu, normal profilinize dokunmadan bir tarayıcı uzantısını veya depolanan bir çerezi neden olarak eler.
  3. Farklı bir ağ deneyin, Wi-Fi yerine mobil veri gibi. Bazı kurumsal veya ISS düzeyindeki proxy'ler istekleri sadece o ağda bir döngü yaratacak şekillerde yeniden yazar.
  4. Tarayıcının önbelleğini temizleyin, yönlendirme yanıtının kendisinin site düzeltilmeden önceden önbelleğe alınmış olması ihtimaline karşı.

Siteyi çalıştırıyorsanız

  1. CDN'inizin SSL modunu kaynağınızın yönlendirme kuralına karşı kontrol edin. Cloudflare'de, SSL/TLS'i açın ve kaynak HTTP'yi HTTPS'e yönlendirdiğinde modu Full veya Full (strict) olarak ayarlayın, Flexible değil. Full hâlâ kaynağın kendinden imzalı bir sertifika kullanmasına izin verir; Full (strict) geçerli bir tane gerektirir.
  2. Körlemesine yönlendirmek yerine iletilen protokol başlığına güvenin. Uygulamanızın önünde bir proxy oturduğunda, kaynağın, proxy arkasından her zaman HTTP gibi görünen ham bağlantıya değil, X-Forwarded-Proto'ya göre yönlendirmesi gerekir. nginx'te:
    if ($http_x_forwarded_proto = "http") {
        return 301 https://$host$request_uri;
    }
    ve CDN'in veya yük dengeleyicinin o başlığı gerçekten her istekte ayarladığından emin olun.
  3. Yönlendirme kurallarınızı sırayla kontrol edin, .htaccess, nginx server blokları, uygulama düzeyinde ara katman yazılımı, ve herhangi bir CDN sayfa kuralı dahil, birbirine işaret eden iki kural için. Bir proxy arkasında döngü yapan yaygın bir Apache kalıbı:
    RewriteCond %{HTTPS} off
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
    yukarıdaki nginx durumuyla aynı şekilde başarısız olur, çünkü %{HTTPS}, ziyaretçinin yaptığı bağlantıyı değil, proxy'nin yaptığı bağlantıyı okur; bunun yerine %{HTTP:X-Forwarded-Proto}'yu kontrol edin.
  4. Geçerliyse WordPress site URL'sini düzeltin: wp-admin > Settings > General'da, hem WordPress Address hem de Site Address'in ziyaretçilerin gerçekte kullandığı URL ile, protokol dahil, eşleştiğini doğrulayın. Yönetici paneli döngü yüzünden erişilemezse, wp-config.php'de doğrudan WP_HOME ve WP_SITEURL'yi ayarlayın.
  5. Bir kanonik biçim seçin ve her şeyi bir kez ona yönlendirin, bir zincir içinde değil: www veya www olmayan, sondaki eğik çizgili veya değil, zamanla farklı araçlar tarafından katmanlanmış birkaç kural yerine karar başına bir kural.
  6. Kuralı düzelttikten sonra CDN önbelleğini temizleyin, çünkü önbelleğe alınmış bir 301 veya 302, süresi dolana veya temizlenene kadar eski yanıtı göndermeye devam eder.

İlgili hatalar

  • 3xx yönlendirme durum kodları, 301, 302, 303, 307 ve 308'in her birinin ne anlama geldiğini açıklar.
  • 301'e karşı 302, sadece döngülerle değil, arama motorları ve önbellekleme için önemli olan, bir yönlendirmenin ne zaman kalıcı ne zaman geçici olması gerektiğini kapsar.

ERR_TOO_MANY_REDIRECTS nasıl önlenir

Bir yönlendirme döngüsü neredeyse her zaman bir yapılandırma değişikliği tarafından tanıtılır: yeni bir CDN, yeni bir SSL sertifikası, bir eklenti güncellemesi, veya site URL'sine dokunan bir geçiş. Yanıt kodunu izleyen ve zamanlı olarak yönlendirmeleri takip eden bir HTTP kontrolü, bir destek bileti beklemek yerine, 158 şehirdeki 300'den fazla kontrol noktasından, bir döngüyü ortaya çıktığı anda yakalar. HostTracker web sitelerini 2004'ten beri izlemektedir ve bir kontrol başarısız olmaya başladığı anda e-posta, SMS, sesli arama, Slack, Telegram ve daha fazlasıyla uyarabilir.

Sık sorulan sorular

Bir tarayıcı vazgeçmeden önce kaç yönlendirmeye izin verir?

Chrome ve Chromium tabanlı tarayıcılar yaklaşık 20'de durur. curl'ün -L ile varsayılan sınırı 50'dir. Tam sayı istemciye göre değişir, ama hepsi eninde sonunda bir döngüyü sonsuza kadar takip etmek yerine duracaktır.

Döngü neden sadece Cloudflare'e (veya başka bir CDN'e) taşındıktan hemen sonra oluyor?

Neredeyse her zaman SSL/TLS modu. Flexible modu kaynağa düz HTTP konuşur; kaynak HTTPS'de ısrar ediyorsa, iki taraf birbirini sonsuza kadar yönlendirir. Full veya Full (strict)'e geçmek genellikle onu hemen çözer.

Bir tarayıcı uzantısı buna neden olabilir mi?

Evet, özellikle HTTPS'i zorlayan, istekleri yeniden yazan, veya çerezleri yöneten uzantılar. Uzantılar devre dışıyken gizli bir pencerede test etmek bunu hızla eler.

Bu SEO'yu etkiler mi?

Evet. Arama motoru tarayıcıları, bir yönlendirme döngüsünde bir tarayıcının yaptığı gibi vazgeçer, ve döngü yapan bir URL dizine eklenmez veya önceden çalışıyorsa dizinden düşer.

Hatayı sadece belirli bir sayfada görüyorum, tüm sitede değil. Onunla ilgili farklı olan ne?

Sayfaya özgü bir kural için kontrol edin: giriş gerektiren bir sayfa, o bir URL için önbelleğe alınmış eski bir yönlendirme, veya sadece o rotada var olan bir sondaki eğik çizgi uyuşmazlığı. curl -sIL ile o URL için tam yönlendirme zincirini çalışan bir sayfayla karşılaştırın.

Tek bir yönlendirme (www olmayandan www'ye gibi) düzeltilmesi gereken bir şey mi?

Hayır, kendi başına tek bir yönlendirme normal ve beklenendir. Sadece son bir 200 yanıtına hiç ulaşmayan tekrarlayan bir zincir bu hatanın anlattığı sorundur.

Şimdi kontrol edin

Ücretsiz kontrolü kendi sitenizde çalıştırın - hesap gerekmez.

HTTP check

Bunu sürekli izleyin

Bir sorun çıktığı anda haberdar olun: HostTracker 300’den fazla konumdan kontrol eder ve size e-posta, SMS, Slack, Telegram ve daha fazlasıyla bildirim gönderir.

HostTracker özellikleri

Bu bölümde daha fazlası: Düzeltin: insanların gerçekten karşılaştığı hatalar için rehberler