HTTP’den HTTPS’e Yönlendirme: .htaccess ve WordPress Rehberi
Sunucuya SSL sertifikası kurmak işin yalnızca yarısıdır. Sertifika kurulduktan sonra site hem http://siteadi.com hem de https://siteadi.com adresinden açılmaya devam eder. Yani ziyaretçilerin bir kısmı hâlâ şifresiz bağlantı üzerinden geziniyordur, arama motorları da aynı içeriği iki ayrı adreste görür.
Tam geçiş, bütün HTTP isteklerinin kalıcı olarak (301) HTTPS karşılığına yönlendirilmesi, uygulama içindeki adreslerin güncellenmesi ve dış servislerdeki tanımların yenilenmesi demektir. Bu üç adımdan biri eksik kalırsa ya kilit simgesi görünmez ya da tarayıcı ERR_TOO_MANY_REDIRECTS hatası verir.
Aşağıdaki sıra, paylaşımlı hosting üzerinde Apache/LiteSpeed çalışan tipik bir kurulum için yazılmıştır. WordPress dışındaki sistemlerde de mantık aynıdır, yalnızca adres ayarının yeri değişir.
Yönlendirmeden önce yapılması gereken kontrol
Yönlendirmeyi açmadan önce sertifikanın gerçekten çalıştığından emin olun. Tarayıcıda https://siteadi.com adresini elle yazın. Sayfa açılıyor ve kilit simgesi çıkıyorsa devam edin. Eğer ERR_SSL_PROTOCOL_ERROR ya da “bu sitenin sertifikası geçerli değil” uyarısı alıyorsanız önce sertifikayı düzeltin; yönlendirmeyi açarsanız site tamamen erişilemez hale gelir çünkü çalışan HTTP sürümünü de kapatmış olursunuz.
İkinci kontrol www tarafıdır. Sertifikanın hem siteadi.com hem www.siteadi.com adını kapsaması gerekir. Let’s Encrypt ile alınan ücretsiz sertifikalar cPanel üzerinden kurulduğunda genelde ikisini de kapsar, ama harici sertifikalarda bu her zaman böyle değildir.
.htaccess ile 301 yönlendirme
Dosyayı cPanel > Dosya Yöneticisi > public_html altında bulacaksınız. Gizli dosyalar görünmüyorsa Dosya Yöneticisi’nin sağ üstündeki Settings ekranından “Show Hidden Files” seçeneğini işaretleyin. Düzenlemeden önce dosyanın bir kopyasını htaccess-yedek.txt adıyla saklayın.
Kuralı dosyanın en üstüne, WordPress’in kendi blok satırlarından önce ekleyin:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Aynı anda www’suz sürüme de sabitlemek isterseniz ikinci bir koşul ekleyin:
RewriteCond %{HTTP_HOST} ^www.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [L,R=301]
301 kullanmak önemlidir. 302 geçici yönlendirme demektir ve arama motorları eski HTTP adresinin sıralama değerini yeni adrese taşımaz.
WordPress’te adresleri güncelleme
Yönlendirme çalışsa bile WordPress veritabanındaki adres hâlâ HTTP ise, tema ve eklentiler sayfa içine http:// ile başlayan görsel ve script adresleri basmaya devam eder. Sonuç, kilit simgesinin kaybolduğu karma içerik hatası olur.
- Ayarlar > Genel ekranında “WordPress Adresi” ve “Site Adresi” alanlarını
https://ile başlayacak şekilde değiştirin. - Bu alanlar gri ve düzenlenemiyorsa adres
wp-config.phpiçinde sabitlenmiştir. DosyadakiWP_HOMEveWP_SITEURLsatırlarını elle güncelleyin. - Yazı içeriklerindeki eski adresler için veritabanında arama-değiştirme yapın. phpMyAdmin’de körlemesine SQL çalıştırmak yerine serileştirilmiş veriyi bozmayan bir arama-değiştirme eklentisi kullanın;
wp_postmetave tema ayarları serileştirilmiş dizi tutar ve düz SQL bu yapıyı bozar. - Değişiklikten sonra önbelleği ve varsa CDN önbelleğini tamamen temizleyin.
ERR_TOO_MANY_REDIRECTS ve proxy arkasında HTTPS
En sık görülen sorun budur. Tarayıcı sayfayı açamaz, adres çubuğunda döngü kurulur. Nedenleri sınırlıdır:
| Belirti | Olası neden | Çözüm |
|---|---|---|
| Site hem .htaccess hem eklenti ile yönlendiriliyor | Çift kural | SSL eklentisinin yönlendirme seçeneğini kapatın, tek kaynakta bırakın |
| Cloudflare “Flexible SSL” modu açık | Proxy sunucuya HTTP ile bağlanıyor, sunucu HTTPS’e yönlendiriyor | Cloudflare SSL modunu Full (strict) yapın |
| Yük dengeleyici arkasında PHP bağlantıyı HTTP sanıyor | $_SERVER['HTTPS'] boş geliyor |
X-Forwarded-Proto başlığını okuyun |
Üçüncü durumda WordPress için wp-config.php dosyasına, require_once ABSPATH . 'wp-settings.php'; satırından önce şu bloğu ekleyin:
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') { $_SERVER['HTTPS'] = 'on'; }
Bu satır olmadan yönetici paneli sürekli kendi kendini yönlendirir ve wp-admin açılmaz.
Search Console, analytics ve site haritası
Google Search Console’da HTTP ve HTTPS ayrı birer mülktür. Geçişten sonra https:// ön ekli yeni bir mülk ekleyin (ya da doğrulaması daha kolay olan Alan Adı tipi mülkü kullanın) ve site haritasını yeni adresle tekrar gönderin. Eski HTTP mülkünü silmeyin; birkaç ay boyunca eski adreslerin taranma davranışını oradan izleyebilirsiniz.
- Site haritası:
sitemap.xmliçindeki bütün URL’lerhttps://ile başlamalı. WordPress’te SEO eklentisinin önbelleğini yenilemek çoğu zaman yeterlidir. - robots.txt: Dosyanın sonundaki
Sitemap:satırını da güncelleyin. - Analytics: Mülk ayarlarındaki varsayılan URL’yi HTTPS yapın. Ölçüm kodunda değişiklik gerekmez.
- Reklam ve doğrulama etiketleri: Google Ads dönüşüm sayfaları, Meta Pixel alan adı doğrulaması ve varsa sanal POS bankasındaki bildirim (callback) adresleri HTTPS’e çevrilmeli. Sanal POS tarafında eski HTTP adresi tanımlı kalırsa ödeme dönüş sayfası boş açılır.
- İç bağlantılar: Menüler, banner görselleri ve tema ayarlarındaki elle yazılmış adresler yönlendirmeye takılır. Her tıklamada gereksiz bir 301 zinciri oluşmaması için bunları da güncelleyin.
Geçiş sonrası doğrulama
Yönlendirmenin gerçekten 301 döndüğünü görmek için tarayıcıda F12 ile Ağ sekmesini açın, HTTP adresini yazın ve ilk isteğin durum kodunu okuyun. 301 Moved Permanently görmelisiniz. Ayrıca şu dört adresi tek tek deneyin: www’lu ve www’suz, HTTP ve HTTPS. Dördü de aynı tek adrese düşmeli.
Son olarak sertifikanın süresini takvime not edin. Otomatik yenilenen sertifikalarda bile yenileme bir kere aksarsa site erişilemez hale gelir; sertifika yönetimi tarafında bitiş tarihinden 15 gün önce uyarı almak en pratik çözümdür.
Özetle
- Yönlendirmeyi açmadan önce HTTPS adresinin tek başına çalıştığını doğrulayın.
- Tek bir yerde, tercihen
.htaccessdosyasının en üstünde 301 kuralı tanımlayın; eklenti yönlendirmesiyle çakıştırmayın. - WordPress’te Ayarlar > Genel adreslerini ve içerikteki eski bağlantıları güncelleyin.
- Cloudflare veya yük dengeleyici arkasındaysanız SSL modunu Full (strict) yapın ve
X-Forwarded-Protobaşlığını okuyun. - Search Console’a HTTPS mülkü ekleyin, site haritasını ve dış servislerdeki callback adreslerini yenileyin.