Sitenize bir SSL sertifikası kurmak tek başına yeterli değildir. Sertifika yüklendikten sonra siteniz hem http:// hem de https:// adreslerinden açılmaya devam eder; ziyaretçilerin bir kısmı hâlâ şifrelenmemiş, güvenli olmayan bağlantı üzerinden gezinir. Gerçek koruma, gelen tüm trafiği otomatik olarak güvenli adrese taşıyan zorunlu yönlendirme ile başlar. Bu işlem, tarayıcı adres çubuğuna example.com yazan bir kullanıcıyı bile sessizce https://example.com adresine götürür.
Bu rehberde önce zorunlu HTTPS'in neden gerektiğini ve doğru sıralamanın (önce sertifika, sonra yönlendirme) neden kritik olduğunu göreceksiniz. Ardından Apache/.htaccess, Nginx ve WordPress için üç ayrı, çalışan yöntemi adım adım uygulayacak; yönlendirmeden sonra ortaya çıkan mixed content (karışık içerik) hatasını çözecek ve son olarak HSTS başlığıyla korumayı bir üst seviyeye taşırken hangi tuzaklara dikkat etmeniz gerektiğini öğreneceksiniz.
Neden Zorunlu HTTPS?#
HTTPS, ziyaretçiyle sunucu arasındaki tüm veriyi TLS ile şifreler. Bir giriş formu, ödeme bilgisi veya iletişim formu düşünün: HTTP üzerinden gönderilen bu veriler aradaki ağda (kafe Wi-Fi'si, ISP, kötü niyetli bir aracı) düz metin olarak okunabilir. HTTPS bunu imkânsız hale getirir. Ancak yönlendirme yapmazsanız, kullanıcı yanlışlıkla HTTP adresine girdiğinde bu koruma devreye girmez.
Zorunlu yönlendirmenin sağladığı somut faydalar şunlardır:
- Güvenlik: Hiçbir ziyaretçi şifrelenmemiş bağlantıda kalmaz; oturum çerezleri ve form verileri korunur.
- SEO: Google, HTTPS'i bir sıralama sinyali olarak kullanır. Ayrıca aynı içeriğin
http://vehttps://sürümlerinin birlikte indekslenmesi yinelenen içerik (duplicate content) sorunu yaratır; 301 yönlendirme tüm otoriteyi tek adreste toplar. - Kullanıcı güveni: Tarayıcılar HTTP sayfalarını "Güvenli değil" etiketiyle işaretler. Özellikle Chrome ve Firefox, şifre veya kart alanı içeren HTTP formlarında büyük uyarılar gösterir.
- Modern özellikler: Servis çalışanları (service workers), HTTP/2, coğrafi konum ve kamera erişimi gibi birçok tarayıcı API'si yalnızca güvenli bağlamda (HTTPS) çalışır.
Yönlendirmenin 301 (kalıcı) olması önemlidir. 302 (geçici) yönlendirme, arama motorlarına adresin gelecekte değişebileceğini söyler ve link otoritesini tam olarak aktarmaz. HTTPS'e geçiş kalıcı bir karar olduğundan her zaman 301 kullanılır.
Önce SSL Kurulu Olmalı#
Yönlendirme kurallarını yazmadan önce geçerli ve çalışan bir SSL sertifikanızın olması şarttır. Sıralama önemlidir: sertifika kurulmadan HTTPS zorlaması yaparsanız, siteniz erişilemez hale gelir. Tarayıcı https:// adresine gitmeye çalışır, sunucuda geçerli sertifika bulamaz ve ziyaretçiye korkutucu bir "Bağlantınız gizli değil" hatası gösterir; ayrıca yönlendirme döngüsü sizi kendi sitenizden kilitleyebilir.
Doğru sıra şudur:
- Alan adınıza bir SSL sertifikası kurun. Bugün çoğu sağlayıcı ücretsiz Let's Encrypt sertifikasını tek tıkla sunar; nasıl çalıştığını SSL sertifikası nedir yazımızda ayrıntılı bulabilirsiniz.
- Tarayıcıda
https://alanadi.comadresini elle açarak sertifikanın çalıştığını, hata vermediğini doğrulayın. - Sertifikanın hem
alanadi.comhem dewww.alanadi.comiçin geçerli olduğundan emin olun (çoğu Let's Encrypt sertifikası her ikisini de kapsar). - Ancak bundan sonra aşağıdaki yönlendirme kurallarını ekleyin.
Clou.TR paketlerinde SSL cPanel üzerinden ücretsiz sağlanır; sertifika ve güvenlik seçeneklerini SSL sayfamızda inceleyebilirsiniz. Sertifikanız hazır olduğunda, aşağıdaki üç yöntemden sunucunuza uygun olanı seçin.
Apache / .htaccess Yöntemi#
Paylaşımlı hosting hesaplarının büyük çoğunluğu Apache üzerinde çalışır ve yapılandırmayı sitenizin kök dizinindeki .htaccess dosyasından yönetmenize izin verir. Bu dosyayı cPanel Dosya Yöneticisi ile public_html klasöründe açın (yoksa oluşturun) ve aşağıdaki bloğu ekleyin:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Bu kuralları satır satır okuyalım:
RewriteEngine On—mod_rewritemotorunu etkinleştirir. Dosyada zaten bir kez varsa tekrar eklemeyin.RewriteCond %{HTTPS} off— kuralın yalnızca bağlantı HTTPS değilken çalışmasını sağlar. Bu koşul olmadan HTTPS istekleri de yönlendirilir ve sonsuz döngü oluşur.RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]— gelen isteğin tüm yolunu (%{REQUEST_URI}) ve alan adını (%{HTTP_HOST}) koruyarak HTTPS sürümüne 301 yönlendirir.Lbayrağı işlemeyi durdurur,R=301kalıcı yönlendirmeyi belirtir.
Bazı sunucular ters proxy (örneğin Cloudflare veya bir yük dengeleyici) arkasında çalışır. Bu durumda %{HTTPS} değişkeni her zaman off görünebilir ve döngü oluşur. Böyle bir senaryoda X-Forwarded-Proto başlığını kontrol etmek gerekir:
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
www ile HTTPS'i tek adımda birleştirmek de mümkündür. Örneğin www'suz sürümü kanonik yapıp aynı zamanda HTTPS'e zorlamak için:
RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteRule ^(.*)$ https://alanadi.com/$1 [L,R=301]
.htaccess üzerine daha derin bir bakış ve www, dizin, sayfa yönlendirme örnekleri için .htaccess yönlendirme rehberimize göz atabilirsiniz. Değişikliği kaydettikten sonra bir gizli sekmede http://alanadi.com adresini açın; adres otomatik olarak https:// sürümüne dönüyorsa kural çalışıyor demektir.
Nginx return 301 Yöntemi#
VDS, VPS veya kendi yönettiğiniz bir sunucuda Nginx kullanıyorsanız .htaccess yoktur; yapılandırma sunucu bloklarında (server blokları) tanımlanır. En temiz ve en performanslı yöntem, HTTP'yi dinleyen ayrı bir sunucu bloğu oluşturup tüm istekleri return 301 ile HTTPS'e göndermektir.
Site yapılandırma dosyanızı (/etc/nginx/sites-available/alanadi.com gibi) açın ve şu iki bloğu düzenleyin:
# HTTP (80) — her isteği HTTPS'e yönlendirir
server {
listen 80;
listen [::]:80;
server_name alanadi.com www.alanadi.com;
return 301 https://$host$request_uri;
}
# HTTPS (443) — asıl siteyi sunar
server {
listen 443 ssl;
listen [::]:443 ssl;
http2 on;
server_name alanadi.com www.alanadi.com;
ssl_certificate /etc/letsencrypt/live/alanadi.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/alanadi.com/privkey.pem;
root /var/www/alanadi.com;
index index.html index.php;
# ... diğer yapılandırma ...
}
Burada önemli olan noktalar:
return 301 https://$host$request_uri;— hem alan adını ($host) hem de yolu ($request_uri) koruyarak kalıcı yönlendirir. Nginx'te bu yöntemifbloğundan çok daha hızlı ve güvenilirdir; mümkün olduğuncaifkullanmaktan kaçının.- HTTP ve HTTPS bloklarını ayrı tutmak, tek bir blok içinde koşullu yönlendirme yapmaktan çok daha temizdir.
- HTTP/2, HTTPS zaten devredeyken performans için neredeyse bedava bir kazançtır. Nginx 1.25.1 ve sonrasında
http2 on;ayrı bir yönerge olarak yazılır; eskilisten 443 ssl http2;biçimi hâlâ çalışır ama artık önerilmez ve yeni sürümlerde uyarı üretir. Bu yüzden yukarıdaki örnekte modern söz dizimini kullandık.
Yapılandırmayı kaydettikten sonra söz dizimini test edin ve Nginx'i yeniden yükleyin:
sudo nginx -t
sudo systemctl reload nginx
nginx -t "syntax is ok" ve "test is successful" derse güvendesiniz. Kendi sunucunuzu sıfırdan kurmayı planlıyorsanız Nginx kurulumu rehberimiz baştan sona anlatır; yönetimini üstlenmek istemiyorsanız yönetilen sanal sunucu veya VDS çözümlerine bakabilirsiniz.
WordPress'te HTTPS Zorlama#
WordPress'te iki katman vardır: sunucu düzeyinde yönlendirme (yukarıdaki Apache/Nginx kuralları) ve WordPress'in kendi adres ayarları. İkisini de doğru yapılandırmak gerekir; aksi halde yönlendirme döngüsü veya karışık içerik yaşarsınız.
Site adreslerini güncelleyin#
En temel adım, WordPress'in kendi adres ayarlarını HTTPS'e çevirmektir. Ayarlar → Genel ekranında iki alanı düzenleyin:
- WordPress Adresi (URL):
https://alanadi.com - Site Adresi (URL):
https://alanadi.com
Yönetici paneline erişemiyorsanız aynı değerleri doğrudan veritabanından güncelleyebilirsiniz:
UPDATE wp_options SET option_value = 'https://alanadi.com'
WHERE option_name IN ('siteurl', 'home');
Tablo öneki (wp_) kurulumunuza göre farklı olabilir. İşlemden önce mutlaka bir yedek alın.
Really Simple SSL eklentisi#
Elle uğraşmak istemiyorsanız Really Simple SSL eklentisi çoğu işi tek tıkla halleder: site adreslerini günceller, veritabanı ve tema içindeki http:// bağlantılarını yeniden yazar, sunucu yönlendirmesini ekler ve karışık içeriği tarar. Yeni başlayanlar için pratik bir çözümdür.
Ancak dikkat: eklenti, karışık içerik düzeltmesinin bir kısmını çalışma anında (sayfa oluşturulurken) yapar. Bu, her istekte küçük bir işlem yükü ekler. Trafiği yüksek sitelerde en temiz yol, site adreslerini ve içindeki bağlantıları kalıcı olarak düzeltip yönlendirmeyi sunucu düzeyinde yapmak, ardından eklentiyi devreden çıkarmaktır. WordPress performansı ve bakımıyla ilgili WordPress hosting paketlerimiz ve WordPress bakım hizmetimiz bu tür geçişleri kolaylaştırır.
Mixed Content (Karışık İçerik) Sorunu#
Yönlendirmeyi kurdunuz ama tarayıcının adres çubuğunda kilit yerine bir uyarı üçgeni görüyorsanız, büyük ihtimalle karışık içerik sorunu yaşıyorsunuz. Bu, HTTPS ile yüklenen bir sayfanın içinde hâlâ http:// ile çağrılan kaynaklar (görsel, CSS, JavaScript, font) bulunması durumudur. Tarayıcı bu güvensiz kaynakları ya engeller ya da sayfanın "tam güvenli değil" olduğunu bildirir.
Karışık içeriği bulmanın en hızlı yolu tarayıcı konsoludur: sayfada F12 ile geliştirici araçlarını açın, Console sekmesine bakın. "Mixed Content" ile başlayan satırlar hangi kaynağın HTTP üzerinden yüklendiğini tam olarak söyler.
Çözüm yolları:
- Kaynak bağlantılarını düzeltin: Tema, içerik ve widget'lardaki sabit
http://alanadi.com/...bağlantılarınıhttps://...yapın. WordPress'te bunu toplu olarak veritabanında değiştirebilirsiniz:
UPDATE wp_posts
SET post_content = REPLACE(post_content, 'http://alanadi.com', 'https://alanadi.com');
Bu komut yalnızca yazı gövdesindeki düz bağlantıları değiştirir. Tema ayarları ve bazı eklentiler bağlantıları serileştirilmiş (serialized) veri olarak saklar; böyle alanlarda ham REPLACE çalıştırmak veriyi bozabilir. Site genelinde güvenli bir değişim için ilerideki "Better Search Replace" gibi serileştirmeye duyarlı bir aracı tercih edin.
- Protokole bağlı olmayan bağlantı kullanın: Kendi kodunuzda kaynakları
//alanadi.com/gorsel.jpgbiçiminde çağırırsanız, tarayıcı sayfanın protokolünü otomatik kullanır. Yine dehttps://ile açıkça yazmak en güvenli tercihtir. - Üçüncü taraf kaynaklar: Harici olarak eklediğiniz betik veya fontlar HTTPS desteklemiyorsa, HTTPS destekleyen bir alternatifle değiştirin; günümüzde neredeyse tüm ciddi sağlayıcılar HTTPS sunar.
- Toplu tarama: Really Simple SSL veya "Better Search Replace" gibi eklentiler tüm veritabanını tarayıp güvenli olmayan bağlantıları düzeltebilir.
Karışık içeriği tamamen temizlemeden HSTS'e geçmeyin; aksi halde bloklanan kaynaklar yüzünden sayfanız bozuk görünebilir.
HSTS Başlığı ve Dikkat Edilmesi Gerekenler#
301 yönlendirme iyi bir başlangıçtır ama küçük bir açık bırakır: kullanıcının ilk isteği yine de HTTP olarak sunucuya ulaşır ve ancak sonra yönlendirilir. Bu kısa an, sofistike bir saldırgan için (SSL stripping saldırısı) fırsat oluşturabilir. HSTS (HTTP Strict Transport Security) bu açığı kapatır: tarayıcıya "bu siteye bundan sonra yalnızca HTTPS ile bağlan, HTTP'yi hiç deneme" der.
HSTS bir yanıt başlığıdır. Apache için .htaccess içine:
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains" env=HTTPS
Nginx'te ise HTTPS sunucu bloğunun içine:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
Başlığın parçaları:
max-age=31536000— tarayıcının kuralı ne kadar süre (saniye cinsinden; burada bir yıl) hatırlayacağı.includeSubDomains— kuralın tüm alt alan adlarını da kapsaması.preload— (yukarıda yok) Chrome, Firefox gibi tarayıcılara gömülü listeye eklenmek istediğinizi belirtir.
Burada çok dikkatli olun, çünkü HSTS geri alınması zor bir taahhüttür:
HSTS bir kez etkinleştiğinde, tarayıcı
max-agesüresince o alan adına ısrarla HTTPS ile bağlanır. Sertifikanız süresi dolar veya HTTPS'i kapatmanız gerekirse, ziyaretçiler siteye hiç erişemez ve bunu sunucu tarafından hızla düzeltemezsiniz.
Bu yüzden güvenli bir geçiş şu adımları izler: (1) HTTPS'i ve yönlendirmeyi tam olarak çalıştırın, (2) karışık içeriği temizleyin, (3) HSTS'i önce kısa bir max-age (örneğin max-age=300) ile deneyin, (4) her şeyin sorunsuz olduğundan emin olunca süreyi bir yıla çıkarın. includeSubDomains eklemeden önce tüm alt alan adlarınızın HTTPS sunduğundan emin olun; aksi halde HTTPS'i olmayan bir alt alan adı erişilemez hale gelir. preload seçeneğine ise ancak uzun vadeli, kalıcı bir HTTPS taahhüdünüz varsa başvurun.
Sıkça Sorulan Sorular#
SSL kurmadan HTTPS yönlendirmesi yapabilir miyim?#
Hayır. Geçerli bir sertifika olmadan HTTPS'e yönlendirirseniz, tarayıcı güvenli bağlantı kuramaz ve ziyaretçilere "Bağlantınız gizli değil" hatası gösterir; siteniz fiilen erişilemez olur. Önce sertifikayı kurun, https:// adresinin hatasız açıldığını doğrulayın, sonra yönlendirmeyi ekleyin.
301 mi 302 mi kullanmalıyım?#
HTTPS'e geçiş kalıcı bir karar olduğu için her zaman 301 (kalıcı) kullanın. 302 geçici yönlendirmedir; arama motorları link otoritesini tam aktarmaz ve eski HTTP adresini indekste tutmaya devam edebilir. 301, tüm SEO değerini HTTPS adresinde toplar.
Yönlendirmeden sonra kilit simgesi neden çıkmıyor?#
Neredeyse her zaman sebebi karışık içeriktir: sayfanız HTTPS ile yüklenirken içinde hâlâ http:// ile çağrılan görsel, CSS veya betik vardır. Tarayıcı konsolunda (F12 → Console) "Mixed Content" uyarılarını bulun ve o kaynakların bağlantılarını https:// olarak düzeltin.
Sonsuz yönlendirme döngüsü hatası nasıl çözülür?#
Bu genellikle Cloudflare veya bir yük dengeleyici gibi ters proxy arkasındayken oluşur; sunucu bağlantıyı HTTP sanır ve tekrar tekrar yönlendirir. Çözüm, %{HTTPS} off yerine %{HTTP:X-Forwarded-Proto} !https koşulunu kullanmak ya da proxy panelinizde SSL modunu "Full" olarak ayarlamaktır.
HSTS'i etkinleştirdikten sonra kaldırabilir miyim?#
Hemen değil. HSTS tarayıcıya kaydedilir ve max-age süresince geçerli kalır; sunucudan kapatsanız bile ziyaretçilerin tarayıcısı süre dolana kadar HTTPS'i zorlar. Bu yüzden ilk kurulumda kısa bir max-age (örneğin 300 saniye) ile başlamak ve her şeyin sağlam çalıştığından emin olduktan sonra süreyi uzatmak en güvenli yaklaşımdır.
www ve HTTPS yönlendirmesini aynı anda yapabilir miyim?#
Evet, tek bir kural bloğuyla hem protokolü (HTTP → HTTPS) hem de alan adı biçimini (www ile www'suz) tercih ettiğiniz kanonik sürüme yönlendirebilirsiniz. Bu, iki ayrı zincirli yönlendirme yerine tek adımda çözerek hem hız hem de SEO açısından daha temizdir.
Doğru sıra ve doğru kurallarla, HTTP'den HTTPS'e zorunlu geçiş yalnızca birkaç satırlık iştir; asıl kritik nokta önce sertifikanın çalıştığından emin olmak ve mixed content'i temizlemektir. Sitenizde ücretsiz SSL, tek tık yönlendirme ve güvenli bir altyapı istiyorsanız hosting paketlerimizi ve SSL çözümlerimizi inceleyerek güvenli bağlantıyı dakikalar içinde ayağa kaldırabilirsiniz.