Kısaca: Sitenizi tek bir adreste toplamak için .htaccess dosyasının en üstüne, hem HTTPS'e zorlayan hem de www'li ya da www'siz biçime yönlendiren tek bir 301 kuralı yazın. Kuralı eklemeden önce SSL sertifikasının etkin olduğundan ve uygulamanızın (ör. WordPress) site adresinin aynı biçimi kullandığından emin olun; aksi hâlde ERR_TOO_MANY_REDIRECTS döngüsü oluşur.
https://alanadiniz.com ve https://www.alanadiniz.com uyarısız açılmalıdır. Durumu cPanel'deki SSL/TLS Durumu (SSL/TLS Status) sayfasından kontrol edin. Sertifika yokken HTTPS'e yönlendirme yapmak ziyaretçilere güvenlik uyarısı gösterir..htaccess, public_html içindeki gizli bir dosyadır. Dosya Yöneticisinde Ayarlar (Settings) düğmesinden gizli dosyaları gösterip düzenlemeden önce bir kopyasını alın.
Sunucularımızdaki LiteSpeed web sunucusu, Apache'nin mod_rewrite kurallarını .htaccess dosyasından okur; değişiklik kaydedildiği anda geçerli olur. Yalnız HTTPS yönlendirmesi istiyorsanız cPanel'deki Alan Adları (Domains) sayfasında bulunan Force HTTPS Redirect (HTTPS yönlendirmesini zorla) anahtarı da yeterlidir. www tercihiniz de varsa aşağıdaki kurallardan birini kullanıp bu anahtarı kapalı bırakın; böylece ziyaretçi tek adımda doğru adrese gider.
Kuralları .htaccess dosyasının en üstüne, varsa # BEGIN WordPress satırının üstüne ekleyin. WordPress kendi işaretleri arasındaki bölümü zaman zaman yeniden yazar; oraya eklenen kurallar kaybolabilir. Örneklerdeki alanadiniz adını kendi alan adınızla değiştirin; koşul satırlarında noktanın önündeki ters eğik çizgiyi (\.) koruyun.
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/\.well-known/
RewriteCond %{HTTP_HOST} ^(www\.)?alanadiniz\.com$ [NC]
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^alanadiniz\.com$ [NC]
RewriteRule ^ https://www.alanadiniz.com%{REQUEST_URI} [L,R=301]
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/\.well-known/
RewriteCond %{HTTP_HOST} ^(www\.)?alanadiniz\.com$ [NC]
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteRule ^ https://alanadiniz.com%{REQUEST_URI} [L,R=301]
| Satır | Ne yapar |
|---|---|
!^/\.well-known/ | SSL doğrulama dosyalarını yönlendirmenin dışında tutar; AutoSSL yenilemelerinin takılmasını önler |
^(www\.)?alanadiniz\.com$ | Kuralı yalnız bu alan adına uygular. public_html altındaki ek alan adları ve alt alan adları yanlışlıkla ana siteye yönlenmez |
%{HTTPS} off [OR] ve sonraki satır | İstek HTTPS değilse ya da adres istenmeyen biçimdeyse yönlendirir |
[L,R=301] | Kalıcı (301) yönlendirme yapar ve kural işlemeyi bitirir. Sayfa yolu ve ?sayfa=2 gibi sorgu dizesi korunur |
Hangi biçimde gelirse gelsin (http://, http://www., https:// veya https://www.) ziyaretçi tek bir yönlendirmeyle doğru adrese ulaşır. Yalnız HTTPS'e zorlamak, www'ye dokunmamak isterseniz şu kısa kural yeterlidir:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
İpucu: Tarayıcılar 301 yönlendirmesini uzun süre önbellekte tutar; hatalı bir kural, düzeltildikten sonra bile sizin tarayıcınızda çalışmaya devam edebilir. Kuralı denerken R=301 yerine R=302 yazın, doğru çalıştığını görünce 301'e çevirin.
Komut İstemi'nde (Windows 10 ve üstünde curl yüklü gelir) veya Terminal'de yanıt başlıklarına bakın:
curl -I http://alanadiniz.com/iletisim
HTTP/1.1 301 Moved Permanently
Location: https://www.alanadiniz.com/iletisim
Dört biçimin dördünü de deneyin. Her biri en fazla bir 301 ile son adrese gitmeli, son adres de 200 yanıtı vermelidir. Bir adres önce başka bir ara adrese, oradan son adrese gidiyorsa iki ayrı kural ya da eklenti çakışıyordur.
Tarayıcı "çok fazla yönlendirme" hatası veriyorsa iki kural birbirini geri çeviriyordur. Siteye hiç girilemiyorsa önce .htaccess'teki yeni satırların başına # koyarak onları devre dışı bırakın, sonra nedeni arayın:
| Neden | Nasıl anlaşılır | Çözüm |
|---|---|---|
| Uygulama ayarı ters yönde | WordPress'te Ayarlar → Genel sayfasındaki WordPress Adresi (URL) ve Site Adresi (URL) www'siz, .htaccess ise www'ye yönlendiriyor (ya da tersi) | İki ayarı da .htaccess ile aynı biçime, https:// ile başlayacak şekilde getirin |
| Vekil sunucuda (ör. Cloudflare) "Flexible" SSL | Ziyaretçi vekile HTTPS ile, vekil sunucumuza HTTP ile bağlanır; sunucu isteği hep HTTP görüp yönlendirir | Vekildeki SSL kipini "Full (strict)" yapın; sunucumuzda geçerli AutoSSL sertifikası olduğu için bu kip sorunsuz çalışır |
| Birden fazla yönlendirme kaynağı | SSL veya yönlendirme eklentisi, Force HTTPS Redirect anahtarı ve .htaccess kuralı farklı biçimleri hedefliyor | Yalnız birini bırakın; tercihen .htaccess kuralını |
| Düzelttiniz ama hata sürüyor | Tarayıcı eski 301 yanıtını ve çerezleri önbellekte tutuyor | Gizli pencerede veya curl -I ile deneyin; site çerezlerini ve önbelleği temizleyin |
Destek ekibimiz yardımcı olsun; taleplere en geç 24 saat içinde ilk yanıt veriyoruz.
Destek talebi oluşturun