Tarayıcı sayfayı açmıyor ve sadece dönüyor; sonunda da ERR_TOO_MANY_REDIRECTS mesajını gösteriyor. curl -I ile başlıkları aldığınızda, her seferinde 301 veya 302 kodunun döndüğünü ve hedef adresin tekrar aynı noktaya geldiğini görürsünüz. Bu, yönlendirme döngüsüdür ve neredeyse her zaman üç belirli yerden birinden kaynaklanır: www ile www'suz çakışması, Cloudflare'deki SSL ayarı veya koşulu yanlış yazılmış bir rewrite kuralı.
Herhangi bir değişiklik yapmadan önce zinciri görün. Burada tahmin yürütmek zaman kaybıdır.
curl -sIL http://example.com | grep -Ei '^(HTTP/|location:)'
curl -sIL https://www.example.com | grep -Ei '^(HTTP/|location:)'
Çıktıyı yukarıdan aşağıya okuyun. Eğer location: tekrarlanırsa ve daha önce gördüğünüz bir adrese geri dönerse, döngü doğrulanır. Atlamaların sayısını da sayın; tarayıcılar genellikle yaklaşık 20 yönlendirmeden sonra durur, ancak döngü pratikte iki atlamayla bile siteyi devre dışı bırakır.
www döngüsü; yönlendirme döngüsünün en yaygın biçimi
Klasik senaryo şudur: hosting panelinde example.com'u www.example.com'a yönlendiren bir kural yazmışsınız ve aynı zamanda DNS'te www kaydını CNAME ile ana alan adına işaret etmişsiniz veya alan adı panelinde ters bir Forwarding etkin. Sonuç şu olur:
http://example.com → 301 → https://www.example.com
https://www.example.com → 301 → https://example.com
https://example.com → 301 → https://www.example.com (ve bu sonsuza kadar böyle)
Burada hata yapıyorlar: sorunun tarayıcıdan veya önbellekten olduğunu düşünüp birkaç kez Ctrl+F5'e basıyorlar. Oysa döngü sunucudadır ve her seferinde doğru ve temiz bir yanıt döner. Belirtisi şudur: Incognito modunda da tam olarak aynı şey olur ve curl de aynı zinciri gösterir.
Çözüm, yönü tekilleştirmektir. Bir sürümü canonical olarak seçin ve yalnızca tek bir yönlendirme katmanı yazın. Apache'de .htaccess ile:
RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ https://www.example.com%{REQUEST_URI} [R=301,L]
Bu kuraldaki önemli nokta [OR] ve [L]'dir. Eğer [L]'yi kaldırırsanız veya koşulu www'nin kendisi için de geçerli olacak şekilde yazarsanız, döngü geri gelir. Nginx'te karşılığı, iç içe iki if değil, canonical olmayan sürüm için ayrı bir server bloğudur.
Değişiklikten önce DNS'i kontrol edin
Bazen döngü aslında web sunucusunda değildir. Yanlış bir A veya CNAME kaydı, alan adının sitenizin hiç olmadığı bir sunucuya ulaşmasına neden olur ve o sunucu da alan adını başka bir yere forward eder. DNS ve ağ sorgulama aracıyla A, AAAA ve CNAME kayıtlarını görün ve www ile kökün aynı hedefe işaret ettiğinden emin olun.
Cloudflare ve Flexible SSL tuzağı
Bu durumu çok görüyorum ve çok az kişi ilk başta bundan şüpheleniyor. Cloudflare'de SSL modu Flexible'dır, yani kullanıcı ile Cloudflare arasındaki trafik HTTPS üzerinden gider, ancak Cloudflare ile sunucunuz arasında HTTP üzerinden. Şimdi sunucuda "her HTTP isteğini HTTPS'e yönlendir" şeklinde bir kuralınız varsa, sunucu Cloudflare'e "HTTPS'e git" diyen bir yanıt verir, Cloudflare aynı isteği tekrar HTTP üzerinden sunucuya gönderir ve döngü tamamlanır.
İki yol var. Ya SSL modunu Full (Strict) olarak değiştirin ve sunucuya geçerli bir sertifika kurun, ya da sunucudaki HTTPS yönlendirme kuralını devre dışı bırakın ve Cloudflare'in bunu Page Rule veya Always Use HTTPS ile kendisinin yapmasına izin verin. Ben her zaman ilk seçeneği tercih ederim; çünkü Flexible pratikte iki nokta arasındaki trafiğin internet üzerinde şifreleme olmadan aktarılması anlamına gelir ve bu, SSL'in temel amacıyla çelişir. Yalnızca sunucunuzda geçerli bir sertifika yoksa ve bugün kuramıyorsanız, geçici olarak ikinci seçenek kabul edilebilir.
curl'de görülen belirti
Bu durumda curl -I https://example.com, location: https://example.com/ ile birlikte bir 301 döndürür; yani mevcut adresin aynısı. Bu desen neredeyse SSL döngüsünün imzasıdır. Başlıklarda server: cloudflare de görürseniz, neredeyse kesindir.
Kendi kendine döngü oluşturan rewrite kuralları
Bazen sorun ne www'dir ne de SSL, aksine fazladan bir koşul veya bir eklentidir. Birkaç yaygın desen:
- İki yönlendirme eklentisi aynı anda etkindir ve her biri karşı sürümü canonical kabul eder.
- WordPress'te
wp_optionstablosundakisiteurlvehomebirbirinden farklıdır; biri www'li, diğeri www'suz. [L]olmadan yazılmış birRewriteRulekuralı, isteği tekrar kendisine gönderir.- Nginx'te, kendisi de aynı koşula tabi olan bir blok içindeki
return 301.
WordPress için gerçek değeri görmenin en hızlı yolu:
wp option get siteurl
wp option get home
Eğer bu ikisi aynı değilse, bu farklılık döngünün kaynağı olabilir. Düzeltmeleri wp option update ile yapılır, ancak öncesinde yedek alın.
Site paylaşımlı hostingde olduğunda
Paylaşımlı hostingde Nginx veya Apache yapılandırmasını değiştirme yetkiniz yoktur ve elinizde yalnızca .htaccess vardır. Burada sıralama önemlidir: .htaccess kuralları yukarıdan aşağıya çalışır ve [L] içeren ilk kural diğerlerini durdurur. HTTPS yönlendirme kuralını WordPress kuralının üstüne koyarsanız ve koşulu da doğruysa sorun çıkmaz; ancak daha aşağıda ve WordPress rewrite kurallarından sonra olursa, hiç çalışmayabilir veya daha kötüsü onlarla çakışabilir.
Linux hostingte genellikle panelde bir "Yönlendirme Yönetimi" bölümü vardır ve bu bölüm aynı kuralları dosyaya dokunmadan oluşturur. Yeni başlıyorsanız onu kullanın, sonra ne yazıldığını anlamak için dosyayı okuyun.
Döngüyü bulmak için adım adım yöntem
curl -sILile dört kombinasyonun (http/https ve www'li/www'suz) tamamı için tam zinciri alın.- Her
location:değerini kağıda yazın ve hangi adresin iki kez tekrarlandığını görün. - Cloudflare etkinse, geçici olarak DNS Only moduna alın ve tekrar test edin. Döngü kaybolursa sorun SSL ayarındadır.
- Yönlendirme eklentilerini tek tek devre dışı bırakın.
- Her değişiklikten sonra tarayıcı önbelleğini ve sunucu önbelleğini temizleyin ve tekrar
curlçalıştırın.
İnsanın çok zamanını alan bir nokta: önbellek. Sunucu düzeyinde veya CDN'de sayfa önbelleği kullanıyorsanız, 301 başlıklı eski yanıt hâlâ sunuluyor olabilir ve siz değişikliğin uygulanmadığını düşünürsünüz. 301 yanıtlarındaki Cache-Control başlığını ciddiye alın; eğer tarayıcı önbelleği ve Cache-Control başlıkları doğru ayarlanmamışsa, yanlış bir yönlendirme kullanıcıların tarayıcısında saatlerce kalabilir.
Sorunun geri dönmesini önlemek
Giderdikten sonra, dört kombinasyonu kontrol eden ve atlama sayısını sayan basit bir test yazın. İkiden fazla atlama olursa uyarı verin. Bu, sonraki değişikliklerden sonra döngünün geri dönmesini önler.
for u in http://example.com http://www.example.com \
https://example.com https://www.example.com; do
n=$(curl -sIL "$u" | grep -c '^location:')
echo "$u -> $n redirects"
done
2'den büyük bir sayı görürseniz, o adresi manuel olarak inceleyin. Yüksek trafikli siteler için bu testi izlemeye koyun; çünkü bir yönlendirme döngüsü birkaç dakika içinde organik trafiği sıfıra indirebilir ve Search Console raporlarında ani tıklama düşüşü olarak görünür. Döngüyü giderdikten sonra site hâlâ yavaşsa, yavaş site sorun giderme sayfasına bakın; bu iki sorun ayrıdır ve karıştırmak yalnızca zaman kaybettirir.
Sık sorulan sorular
ERR_TOO_MANY_REDIRECTS neden yalnızca bazı tarayıcılarda görünür?
Çünkü her tarayıcının yönlendirme sayısı için farklı bir üst sınırı vardır ve bazıları önbelleği daha geç temizler. Döngü gerçekse, Incognito modunda da tekrarlanır. Yalnızca belirli bir tarayıcıda görüyorsanız, muhtemelen o tarayıcıdaki önbellek veya HTTPS yönlendirici gibi bir eklenti suçludur.
Tarayıcı önbelleğini temizlemek yönlendirme döngüsünü giderir mi?
Hayır. Önbellek yalnızca eski yanıtın daha geç değişmesine neden olur, ancak döngü sunucuda oluşur. Yönlendirme kuralı düzeltilmediği sürece, her yeni istek de aynı yolu izler. Önbelleği temizlemek yalnızca değişikliklerin sonucunu görmek için gereklidir.
www döngüsünü DNS'te yönlendirme ile mi yoksa web sunucusunda mı çözmeliyim?
Web sunucusunda. DNS düzeyinde yönlendirme (Forwarding) daha az kontrol verir ve sunucu kurallarıyla çakışabilir. .htaccess veya Nginx yapılandırmasındaki temiz bir 301 kuralı hem test edilebilir hem de loglarda görülür.
Döngünün Cloudflare'den mi yoksa sunucudan mı olduğunu nasıl anlarım?
Geçici olarak kaydı DNS Only moduna alın, böylece trafik doğrudan sunucuya ulaşsın. Döngü kaybolursa sorun Cloudflare'deki SSL ayarındadır. Devam ederse, sunucudaki yönlendirme kuralı suçludur. Teşhisten sonra SSL modunu Full (Strict) olarak geri alın.
Yorumlar 0
Henüz yorum yok — ilk siz olun!