err_too_many_redirects Hatası Nedir, Nasıl Çözülür?

Yayın tarihi:

13 dk okuma

Acar Diveroli
Yazar: Acar Diveroli
/account ve /login düğümleri arasında iç içe yönlendirme döngüleri; mavi 20. adım /login'e varmadan duruyor, yanda adım kaydı

Bir alışveriş sitesine ya da giriş sayfasına giden bir bağlantıya tıklıyorsunuz. Sekmedeki yükleme simgesi bir an dönüyor, ardından Chrome "Bu sayfa çalışmıyor" başlığını, altında "example.com sizi çok fazla kez yönlendirdi." satırını ve en altta ERR_TOO_MANY_REDIRECTS kodunu gösteriyor. Firefox aynı durumu "Sayfa doğru bir şekilde yönlendirilmiyor" diye anlatıyor; Safari ise çok fazla yeniden yönlendirme yapıldığı için sayfayı açamadığını söylüyor.

Zararlı bir şey olmadı. Site, tarayıcınızı bir adresten ötekine gönderip durdu, tarayıcı da bir noktada takip etmeyi bıraktı. Bu yazıda yönlendirme döngüsünün ne olduğunu, ziyaretçi olarak uygulayabileceğiniz çözümleri, site sizinse neyi değiştirmeniz gerektiğini (Cloudflare, HTTPS ve www kuralları, WordPress), zinciri gösteren tek bir komutu ve aynı hatanın bir scraper'da (sitelerden otomatik veri toplayan bir programda) nasıl göründüğünü anlatıyoruz.

ERR_TOO_MANY_REDIRECTS ne anlama gelir?

Yönlendirme, sunucunun "bu sayfa başka bir yerde, oraya git" diyen kısa cevabıdır; tarayıcı bu cevabı size sormadan izler. Siteler yönlendirmeyi sürekli kullanır: http:// adresinden https:// adresine, eski bir sayfadan yenisine, üyelere özel bir sayfadan giriş formuna ve oradan geri.

Yönlendirme döngüsü, hiç bitmeyen bir yoldur: A sayfası sizi B'ye, B de yeniden A'ya gönderir. HTTP standardı (RFC 9110, bölüm 15.4) istemcilerden, yani tarayıcı gibi programlardan, bu tür döngüleri fark edip araya girmelerini ister. Tarayıcıların uyguladığı Fetch standardı da 20 yönlendirmeden sonra isteği bir ağ hatasıyla bitirir. Chrome da Firefox da bu sınırda durur.

Hata her tarayıcıda nasıl görünür?

Chrome ve Firefox metinleri, tarayıcıların kendi metin dosyalarından ve Türkçe çevirilerinden alındı. Edge, Opera ve Brave, Chrome'un altyapısı olan Chromium üzerine kuruludur ve aynı kodu gösterir.

TarayıcıEkranda yazanKod
Chrome"Bu sayfa çalışmıyor", "example.com sizi çok fazla kez yönlendirdi." ve "Çerezlerinizi silmeyi deneyin" bağlantısıERR_TOO_MANY_REDIRECTS
Firefox"Sayfa doğru bir şekilde yönlendirilmiyor" ve sorunun çerezlerin reddedilmesinden kaynaklanabileceğini söyleyen bir notYok
Safari (Mac, iPhone)Safari, çok fazla yeniden yönlendirme yapıldığı için sayfayı açamadığını söylerYok

Apple'ın arşive kaldırdığı Safari yardım sayfası da aynı döngüyü anlatır. Üç tarayıcı da önce çerezleri işaret eder.

Yönlendirme döngüsü adım adım nasıl oluşur?

Üyelere özel bir sayfa düşünün:

  1. https://example.com/account adresini açarsınız.
  2. Sunucu, oturum çerezini arar. Çerez, sitenin önceki bir ziyaretinizde tarayıcınıza bıraktığı küçük bir metin parçasıdır. Sunucu çerezi bulamaz ve sizi /login sayfasına yönlendirir.
  3. Giriş sayfası, kendi tarafında oturumunuzun açık olduğunu görür, yeni bir çerez bırakır ve sizi geri gönderir.
  4. Tarayıcı bu çerezi saklamaz ya da geri göndermezse 2. adım tekrarlanır. Çerez engellenmiş, süresi dolmuş sayılmış ya da başka bir adres için yazılmış olabilir.
  5. 20 turdan sonra tarayıcı durur ve hatayı gösterir.

İkinci büyük grupta çerezin hiçbir rolü yoktur; sorun, birbirini tutmayan iki kuraldır. Bir katman https:// adresine zorlar, başka bir katman ziyaretçiyi http:// adresine geri gönderir; ya da bir kural adrese www. ekler, öteki onu siler.

Hataya ne yol açar, sorun kimde?

NedenSorun kimde?Tipik belirtiİlk adım
Eskimiş, bozuk ya da engellenmiş bir çerezSizdeTek site, tek tarayıcıO sitenin çerezlerini silin ya da izin verin
Adresleri değiştiren bir uzantıSizdeGizli pencerede açılıyorUzantıları kapatın
Cihazın saati çok yanlışSizdeOturum açarken döngüSaati otomatik ayarlayın
Başka bir ülke gösteren VPN ya da proxySizde ve sitedeYalnız VPN açıkkenVPN'i kapatın
Tarayıcının hatırladığı kalıcı bir yönlendirmeSite düzeltildikten sonra sizdeBaşka cihazlar açıyorGizli pencere kullanın
Çatışan HTTPS ayarları, çoğu zaman Cloudflare FlexibleSitedeHer ziyaretçide, her cihazdaSite sahibi: SSL/TLS modunu değiştirsin
İki ayrı yerde tanımlı www ya da https kuralıSitedeAdres iki biçim arasında gidip geliyorSite sahibi: tek kural bıraksın
WordPress ayarlarında yanlış adresSitedeSitenin tamamı ya da yönetim paneli döngüdeSite sahibi: iki URL alanını düzeltsin

Ziyaretçi olarak nasıl çözersiniz?

Her adımdan sonra sayfayı yenileyin.

  1. Gizli pencerede deneyin. Chrome'da Diğer > Yeni Gizli pencere'yi seçin. Gizli pencere çerezsiz açılır, uzantılar da orada yalnız siz izin verdiyseniz çalışır. Sayfa açılıyorsa sebep bir çerez ya da bir uzantıdır.
  2. Yalnız o sitenin çerezlerini silin; hangi site olduğunu hata mesajındaki adres söyler. Bu işlem yalnız o sitedeki oturumunuzu kapatır.
    • Bilgisayarda Chrome: Diğer > Ayarlar > Gizlilik ve güvenlik > Üçüncü taraf çerezleri > Tüm site verilerini ve izinlerini göster yolunu izleyin, siteyi aratın ve Sil'i seçin (Google'ın adımları).
    • Android'de Chrome: sitedeyken adres çubuğunun solundaki Sayfa bilgileri'ne, ardından Çerezler ve site verileri'ne, sonra Sil'e dokunun.
    • Firefox: adres çubuğunun solundaki kalkan simgesine tıklayın ve Çerezleri ve site verilerini temizle'yi seçin (Mozilla'nın adımları, İngilizce).
    • Mac'te Safari: Safari > Ayarlar > Gizlilik > Web Sitesi Verilerini Yönet yolunu izleyin, siteyi seçin ve Sil'e tıklayın (Apple'ın adımları).
    • iPhone'da Safari: Ayarlar > Uygulamalar > Safari > Gelişmiş > Web Sitesi Verileri > Tüm Web Sitesi Verilerini Sil. Bu işlem bütün sitelerin verilerini siler; başka sitelerde de yeniden oturum açmanız gerekir.
  3. Uzantıları kapatın. Reklam engelleyiciler, gizlilik araçları, "her zaman HTTPS" eklentileri ve VPN uzantıları sayfanın nereye gideceğini değiştirebilir. Chrome'da Diğer > Uzantılar > Uzantıları yönet'i açın ve uzantıları tek tek kapatın (Google'ın adımları).
  4. Tarihi ve saati kontrol edin. Tarayıcınız, cihazınızın saatine göre son kullanma tarihi geçmiş bir çerezi siler (RFC 6265, bölüm 5.3); saat birkaç gün ileride olduğunda yeni gelen oturum çerezi bile anında kaybolabilir. Windows'ta Başlat > Ayarlar > Saat ve dil > Tarih ve saat yolunu izleyin ve Saati otomatik olarak ayarla seçeneğini açın (Microsoft'un adımları). Yanlış saat, Bağlantınız Gizli Değil uyarısına da yol açar.
  5. VPN'i ya da proxy'yi kapatıp sayfayı yenileyin; nedenini bir sonraki bölümde anlatıyoruz.
  6. Başka bir ağda deneyin. Sayfa telefonunuzda mobil veriyle de açılmıyorsa döngü sitededir: site sahibine adresi ve saati bildirin, sonra bekleyin. Siteye hiç bağlanılamıyorsa karşınızdaki başka bir hatadır.

Neden en çok oturum açarken çıkar?

Oturum açarken adresler arasında bilerek gidip gelinir: bir mağaza sizi bir giriş hizmetine (kendi hizmetine, Google'a ya da Microsoft'a) gönderir, hizmet bir çerez bırakıp sizi geri yollar. İki taraftan birinin çerezi eksikse ya da engelleniyorsa yeniden başa dönersiniz. Mesajda giriş hizmetinin adı geçiyorsa, örneğin "accounts.google.com sizi çok fazla kez yönlendirdi" yazıyorsa, sitenin çerezleriyle birlikte o hizmetin çerezlerini de silin; çerezleri engelliyorsanız ikisine de izin verin.

VPN ya da proxy neden yönlendirme döngüsüne yol açabilir?

Birçok site, hangi ülke sürümünü göstereceğine IP adresinize bakarak karar verir (Almanya için /de/ gibi) ve seçimi bir çerezde de saklar. IP'niz bir ülkeyi, çerez başka bir ülkeyi gösterdiğinde bu iki kural sizi bir sürümden ötekine gönderip durabilir (Coğrafi Engelleme Nedir? Siteler Konumunuzu Nasıl Anlar?).

VPN, sitenin gördüğü ülkeyi değiştirir; IP'si dönen (rotating) bir proxy ise aynı zincirin iki adımını iki farklı adresten bile gönderebilir. VPN'i kapatıp sayfayı yenileyin. Sorun düzelirse VPN'i yeniden açmadan önce sitenin çerezlerini silin ya da ülkeyi sitenin kendi menüsünden seçin. Bilerek proxy üzerinden geziniyorsanız ziyaret boyunca tek bir çıkış adresi kullanın: Sticky Proxy, belirlediğiniz süre boyunca aynı IP'yi korur (Proxy ve VPN Farkı).

Site sizinse: döngü nereden geliyor?

Önce zinciri okuyun (bir sonraki bölüm); zincirin biçimi hangi kuralın yanlış olduğunu gösterir.

Cloudflare'in Flexible SSL modu

Flexible modda ziyaretçiler Cloudflare'e HTTPS ile ulaşır, ama Cloudflare sizin sunucunuza şifresiz HTTP ile bağlanır (Cloudflare'in şifreleme modları). HTTP'yi HTTPS'ye yönlendiren bir sunucu, Cloudflare'den gelen her isteği HTTP olarak görür ve yeniden yönlendirir; sonuçta https://example.com/ adresi kendisine yönlendirilir.

Cloudflare panelinde SSL/TLS > Overview sayfasını açın. Sunucunuzda geçerli bir sertifika varsa Full (strict)'i, sertifikayı edinene kadar Full'u seçin. Tersi de döngü yaratır: Full modda HTTPS isteklerini HTTP'ye geri gönderen bir sunucu. Cloudflare'in bu hataya ayırdığı sayfa şüpheliler arasına Always Use HTTPS ayarını, HSTS'yi ve çatışan yönlendirme kurallarını da ekler.

İki ayrı yerde tanımlı HTTPS ve www kuralları

Hosting paneli adrese www. eklerken uygulama onu siler; ya da CDN HTTPS'ye zorlarken sunucu HTTP'ye zorlar. Tek bir genel adres seçin, onu tek bir katmanda uygulayın ve yönlendirme eklentileriyle .htaccess satırları dahil diğer bütün kuralları kaldırın. Önde bir CDN dururken hangi katmanın neyi gördüğünü Forward Proxy ve Reverse Proxy Arasındaki Fark yazısında anlattık.

WordPress adres ayarları

WordPress yönlendirmelerini Ayarlar > Genel altındaki WordPress adresi (URL) ve Site adresi (URL) alanlarından üretir. WordPress'in rehberine göre iki alan da https:// ile başlamalı ve sonunda eğik çizgi olmamalıdır; yanlış bir protokol ya da fazladan bir www ziyaretçileri döngüye sokar. Döngü yüzünden yönetim paneline giremiyorsanız iki değeri wp-config.php dosyasında tanımlayın:

php
define( 'WP_HOME', 'https://example.com' );
define( 'WP_SITEURL', 'https://example.com' );

HTTPS'yi önde duran bir yük dengeleyici ya da reverse proxy karşılarken WordPress'in kendisi şifresiz HTTP ile çalışıyorsa her isteği güvensiz sanar ve kendi belgelerindeki ifadeyle sonsuz bir yönlendirme döngüsüne girer. Proxy'nin eklediği X-Forwarded-Proto başlığını okumasını sağlayın; gereken satırlar WordPress'in HTTPS rehberinde var.

Düzeltmeyi gizli pencerede test edin

HTTP standardı, tarayıcıların 301 ("Moved Permanently", kalıcı taşındı) yönlendirmesini saklamasına izin verir; bu yüzden sunucu düzeldikten sonra kendi tarayıcınız döngüde kalmaya devam edebilir. Gizli pencerede test edin ve denemeler sırasında geçici 302 yönlendirmeleri kullanın.

İleri seviye: yönlendirme zincirini tek komutla görün

Bu bölüm komut satırına aşina olanlar içindir. curl Windows 10, Windows 11 ve macOS'ta hazır gelir (PowerShell'de curl.exe yazın). Aşağıdaki komut yönlendirmeleri izler, her adımın başlıklarını yazar ve on adımda durur:

bash
curl -sSIL --max-redirs 10 https://example.com/

Komutu, bilgisayarımızda Flexible döngüsünü taklit eden bir test sunucusuna karşı çalıştırdık. Önemli satırlar (kısaltıldı; curl 8.21.0, Windows 11):

text
HTTP/1.1 301 Moved Permanently
Location: https://example.com/
HTTP/1.1 301 Moved Permanently
Location: https://example.com/
HTTP/1.1 301 Moved Permanently
Location: https://example.com/
curl: (47) Maximum (10) redirects followed

Nasıl okunur?

  • Location istediğiniz adresin aynısıysa sunucu isteğin HTTP ile geldiğini sanıyordur (Flexible mod ya da X-Forwarded-Proto başlığını iletmeyen bir proxy).
  • Adres iki biçim arasında gidip geliyorsa, örneğin www ile ve www olmadan, iki kural çatışıyordur.
  • Bir sayfa ile giriş sayfası arasında gidip geliyorsa bir çerez saklanmıyordur; Set-Cookie satırlarına bakın.
  • Zincir 200 ile bitiyorsa sunucu tarafında sorun yoktur, döngü bir tarayıcının çerezlerinde ya da önbelleğindedir.

Scraper ya da crawler yazıyorsanız

Web scraping (veri kazıma) kodunda aynı döngü başka sözlerle karşınıza çıkar. Aşağıdaki iki mesajı da döngüye giren bir test sayfasında ürettik:

AraçYazdığı mesaj
Python Requests 2.34requests.exceptions.TooManyRedirects: Exceeded 30 redirects.
Python için Playwright 1.58Page.goto: net::ERR_TOO_MANY_REDIRECTS at <url>

Requests 30 yönlendirmeden, tarayıcılar 20 yönlendirmeden sonra vazgeçer; sınırı yükseltmek hiçbir işe yaramaz. Koddaki olağan nedenler:

  • Ortak bir çerez deposu yok. Ayrı requests.get() çağrıları çerezleri paylaşmaz; her site için tek bir requests.Session() kullanın (Python'da Oturum ve Çerez Yönetimi).
  • İstemcinizin hiç almadığı bir çerez. Bazı sayfalar çerezi JavaScript ile ya da bir tıklamadan sonra bırakır; çerez onay bandı buna örnektir. Düz bir HTTP istemcisi bu betiği hiç çalıştırmaz. Bu sayfalarda sitenin API'sini ya da gerçek bir tarayıcıyı kullanın. Zincir bir engelleme sayfasında bitiyorsa durun: bu sitenin kararıdır (Sorry, You Have Been Blocked Hatası Nedir?).
  • Çıkış IP'si zincirin ortasında değişiyor. İstek başına rotasyonda zincirin her adımı farklı bir IP'den, hatta farklı bir ülkeden çıkabilir; ülke sürümünü IP'ye göre seçen bir site de ikinci adımı, birinci adımın hiç istemediği bir yere gönderir. Her zincir için sticky oturumla tek bir çıkış kullanın ve ülkeyi hedeflemeyle sabitleyin; Residential Proxy ikisini de sunar (IP Rotasyonu Nedir ve Nasıl Çalışır?).

Zincirin nerede geri döndüğünü görmek için onu adım adım kendiniz izleyin:

python
from urllib.parse import urljoin, urlsplit

import requests

PROXY = "http://user:pass@pr.proxynet.io:8000"  # sticky oturumlu bir kullanıcı adı kullanın
START = "https://example.com/account"


def trace(url, session, max_hops=10):
    """Yönlendirmeleri tek tek izler, ilk tekrarda durur."""
    seen = set()
    for hop in range(max_hops):
        r = session.get(url, allow_redirects=False, timeout=15)
        target = r.headers.get("Location", "")
        cookie = "sets a cookie" if "Set-Cookie" in r.headers else "no cookie"
        print(hop, r.status_code, urlsplit(url).path, "->", target, f"({cookie})")
        if not r.is_redirect:
            return r
        if url in seen:
            print("Loop found: this URL was already requested")
            return None
        seen.add(url)
        url = urljoin(url, target)
    print(f"Stopped after {max_hops} hops")
    return None


with requests.Session() as s:  # zincirin tamamı için tek çerez deposu
    s.proxies = {"http": PROXY, "https": PROXY}
    s.headers["User-Agent"] = "example-crawler/1.0 (+https://example.com/bot)"
    trace(START, s)

Betiği, user:pass kimlik doğrulaması isteyen yerel bir test proxy'si üzerinden çalıştırdık. Hedef, çerez onayı döngüsünü taklit eden bir test sayfasıydı; gerçek bir sitede bu çerez bir düğmeye tıklanınca gelirdi (requests 2.34.2, Python 3.13):

text
0 302 /account -> /consent (no cookie)
1 302 /consent -> /account (no cookie)
2 302 /account -> /consent (no cookie)
Loop found: this URL was already requested

Hiçbir adım çerez bırakmadığı için bu istemci /account sayfasına asla ulaşamaz. Bir adım çerez bıraktığı hâlde döngü sürüyorsa çerezin alan adını (domain) ve yolunu (path) bir sonraki adresle karşılaştırın, ardından çıkış IP'nizin değişip değişmediğine bakın. Hata ayıklarken siteyi yormayın: aynı anda tek bir zincir izleyin, kendinizi tanıtan bir User-Agent kullanın ve robots.txt kurallarına uyun.

Bu hatayla nerelerde karşılaşırsınız?

Sık yapılan hatalar

  • İşe bütün çerezleri silerek başlamak. Her yerdeki oturumunuz kapanır; önce mesajda adı geçen siteyle başlayın.
  • Tarayıcıyı yeniden kurmak ya da modemi yeniden başlatmak. Döngü bir çerezde, bir uzantıda ya da sitenin kurallarındadır.
  • Koddaki yönlendirme sınırını yükseltmek. Döngü 30 adımda da 100 adımda da döngüdür.
  • Sunucudaki düzeltmeyi aynı tarayıcıda test etmek. Hatırlanan bir 301, eski döngüyü yaşatır.
  • Döngüyü durdurmak için HTTPS'yi kapatmak. Doğrusu, katmanları birbiriyle uyumlu hâle getirmektir.

Karar rehberi

DurumunuzNe yapmalısınız?
Tek bir site açılmıyor ya da yalnız gizli pencerede açılıyorO sitenin çerezlerini silin, sonra uzantılara bakın
Döngü bir giriş sayfasında başlıyorSitenin ve giriş hizmetinin çerezlerini silin
Yalnız VPN ya da proxy açıkken oluyorKapatın, sitenin çerezlerini silin, ülkeyi sitede seçin
Her cihazda ve her ağda açılmıyorBekleyin ya da siteye haber verin
Cloudflare'deki siteniz aynı adrese yönlendiriyorSSL/TLS modunu Full (strict) yapın
WordPress siteniz HTTPS'ye geçince döngüye girdiİki adres alanını düzeltin
Scraper'ınız "Exceeded 30 redirects" diyorHer zincire tek oturum ve tek sticky çıkış; adımları izleyin

Sıkça sorulan sorular

ERR_TOO_MANY_REDIRECTS bir virüs ya da hacklenme belirtisi mi?

Hayır. Hata bir çerezden, bir uzantıdan ya da sitenin kendi yönlendirme kurallarından kaynaklanır; tarayıcı bilerek durmuştur.

Hata neden bir sitede çıkıyor da diğerlerinde çıkmıyor?

Döngü o sitenin kurallarında ya da o site için saklanan çerezlerdedir; diğer sitelerin çerezleri ve kuralları ayrıdır.

Bütün çerezlerimi silmem gerekiyor mu?

Hayır. Mesajda adı geçen sitenin çerezlerini, döngü giriş sayfasında başlıyorsa giriş hizmetinin çerezlerini de silin. Bu yalnız o sitelerdeki oturumlarınızı kapatır.

Döngü neden yalnız VPN açıkken oluyor?

Site ülke sürümünü IP'nize göre seçerken bir çerez başka bir ülkeyi hatırlıyordur. VPN'i kapatın, sitenin çerezlerini silip yeniden bağlanın ya da ülkeyi sitenin kendisinde seçin.

Chrome kaç yönlendirmeye izin verir?

Yirmi; bu, Fetch standardındaki sınırdır. Firefox da aynı sayıyı kullanır, Python'daki Requests kütüphanesi ise 30'a kadar izin verir. Sıradan bir sayfa bir ya da iki yönlendirmeyle açılır.

Cloudflare'de too many redirects hatası nasıl düzeltilir?

SSL/TLS modunu Full (strict) yapın; bunun için sunucunuzda geçerli bir sertifika gerekir. Flexible'da kalacaksanız sunucunun kendi HTTP'den HTTPS'ye yönlendirmesini kaldırın. Ardından Always Use HTTPS, HSTS ve yönlendirme kurallarınızda birbirini tekrarlayan ayar olup olmadığına bakın.

Özet

ERR_TOO_MANY_REDIRECTS, bir sitenin tarayıcınızı döngüye soktuğunu ve tarayıcının 20 yönlendirmeden sonra durduğunu gösterir. Ziyaretçiler çoğu durumu tek bir sitenin çerezlerini silerek, gizli pencere deneyerek, uzantıları ve VPN'i kapatarak ve saati kontrol ederek çözer; her cihazda görülen bir döngüyü ise site düzeltmelidir. Site sahipleri birbirini tutmayan iki kural aramalıdır. Kodda her zincir için tek oturum ve tek sticky çıkış kullanın. Proxy türlerini ve hangisinin ne işe yaradığını proxy sayfamızda karşılaştırabilirsiniz.

ChatGPT'ye sorClaude'a sor