ERR_TOO_MANY_REDIRECTS Nedir?
ERR_TOO_MANY_REDIRECTS hatası, tarayıcının bir sayfa için sınırsız yönlendirme döngüsüne girdiğinde ortaya çıkar. Tarayıcı genellikle 20 yönlendirmeden sonra bir üst limit koyarak döngüyü keser ve bu hatayı gösterir.
SSL kurulumundan sonra bu hata çok yaygındır çünkü HTTP → HTTPS yönlendirmesi ve sunucu/CDN/uygulama arasındaki basamaklar doğru yapılandırılmadığında sonsuz döngü oluşabilir.
Tipik Yönlendirme Döngüsü Senaryosu
Kullanıcı http://example.com adresini ziyaret eder:
- Sunucu: HTTP → HTTPS yönlendir →
https://example.com - CDN/Proxy: HTTPS → HTTP olarak origin'e iletir
- Sunucu: HTTP → HTTPS yönlendir →
https://example.com - ... sonsuz döngü
Neden 1: Cloudflare SSL Modu Yanlış
En yaygın neden. Cloudflare SSL modu "Flexible" ise, Cloudflare ile ziyaretçi arasında HTTPS kullanılır ama Cloudflare, origin sunucuya HTTP ile bağlanır. Sunucuda HTTP→HTTPS yönlendirmesi varsa döngü oluşur.
Çözüm
- Cloudflare SSL modunu "Full" veya "Full (Strict)" olarak ayarlayın
- Full: Origin'de herhangi bir SSL sertifikası (self-signed dahil) yeterli
- Full (Strict): Origin'de geçerli bir SSL sertifikası gerekli (önerilen)
Cloudflare Dashboard → SSL/TLS → Overview → SSL bilgisi modunu değiştirin.
Neden 2: Nginx/Apache'de Çakışan Kurallar
Hem sunucu bloğunda hem .htaccess dosyasında yönlendirme kuralları varsa çakışma olabilir.
Nginx Çözümü
# YANLIŞ: Aynı server bloğunda döngü
server {
listen 443 ssl;
server_name example.com;
# Bu kural HTTPS'teyken bile tetiklenir!
if ($scheme = "http") {
return 301 https://$host$request_uri;
}
}
# DOĞRU: Ayrı server blokları
server {
listen 80;
server_name example.com www.example.com;
return 301 https://www.example.com$request_uri;
}
server {
listen 443 ssl;
server_name example.com www.example.com;
# ... SSL yapılandırması
}
Apache Çözümü
# YANLIŞ: Döngü oluşturan kural
RewriteEngine On
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# DOĞRU: HTTPS kontrolü eklendi
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# VEYA: X-Forwarded-Proto kontrolü (proxy/CDN arkasında)
RewriteCond %{HTTP:X-Forwarded-Proto} !=https
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Neden 3: WordPress Site URL Sorunu
WordPress'te "Site URL" ve "WordPress URL" HTTP olarak ayarlanmışsa, WordPress kendi yönlendirmesini HTTP'ye yapar.
Çözüm
# wp-config.php dosyasına ekleyin
define('WP_HOME', 'https://www.example.com');
define('WP_SITEURL', 'https://www.example.com');
# Veya veritabanında güncelleyin
UPDATE wp_options SET option_value = 'https://www.example.com' WHERE option_name = 'siteurl';
UPDATE wp_options SET option_value = 'https://www.example.com' WHERE option_name = 'home';
Neden 4: Load Balancer veya Reverse Proxy
Load balancer SSL'i sonlandırıp (SSL termination) backend'e HTTP ile ilettiğinde, backend sunucu HTTPS'te olmadığını düşünerek yönlendirme yapar.
Çözüm
# Nginx: Proxy'den gelen header'ı kontrol et
set $redirect_https 0;
if ($scheme = "http") { set $redirect_https 1; }
if ($http_x_forwarded_proto = "https") { set $redirect_https 0; }
if ($redirect_https = 1) { return 301 https://$host$request_uri; }
# Apache: X-Forwarded-Proto kontrolü
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Hata Ayıklama: Yönlendirme Zincirini Görme
# curl ile yönlendirme zincirini izleyin
curl -vL http://example.com 2>&1 | grep -i "location:"
# Veya httpstatus.io adresini kullanın (web aracı)
# Her adımdaki yönlendirmeyi ve HTTP kodlarını gösterir
Sonuç
ERR_TOO_MANY_REDIRECTS hatası genellikle CDN/proxy SSL modu ile sunucu yönlendirme kuralları arasındaki uyumsuzluktan kaynaklanır. Cloudflare kullanıyorsanız "Full (Strict)" SSL modu, aksi halde X-Forwarded-Proto header kontrolü sorunu çözer. curl komutuyla yönlendirme zincirini izleyerek sorunlu adımı hızlıca tespit edebilirsiniz.