LIONFIN
SSL Sertifikaları

HTTP → HTTPS Yönlendirme: .htaccess, Nginx, IIS ve Paneller

7 dk okuma Güncelleme: 1 görüntülenme
HTTP → HTTPS Yönlendirme: .htaccess, Nginx, IIS ve Paneller

HTTP → HTTPS yönlendirme, ziyaretçi ya da arama motoru sitenize şifresiz bağlantıyla geldiğinde onu 301 (kalıcı) yanıtıyla aynı sayfanın şifreli sürümüne aktaran sunucu kuralıdır. Geçerli bir SSL sertifikası kurulduktan sonra atılacak ilk adımdır: sertifika tek başına şifresiz adresi kapatmaz, yönlendirme yoksa site iki ayrı adresten yayın yapmayı sürdürür.

Yöntem, sitenin çalıştığı yazılıma göre değişir: paylaşımlı hostingde .htaccess ya da panel anahtarı, kendi sunucunuzda Nginx veya IIS yapılandırması kullanılır. Sertifikanın ne olduğu ve türleri SSL sertifikası nedir rehberinde; yönlendirmeden sonra sayfada kalan şifresiz kaynaklar ise mixed content hatası başlığı altında ele alınıyor.

Kısa cevap

HTTP → HTTPS yönlendirme, sitenin şifresiz adresine gelen her isteği kalıcı 301 koduyla aynı yolun HTTPS sürümüne göndermektir. Apache ve LiteSpeed’de .htaccess içindeki RewriteCond %{HTTPS} off kuralıyla, Nginx’te 80 portundaki server block’a yazılan return 301 satırıyla, IIS’te URL Rewrite kuralıyla yapılır; cPanel ve Plesk’te tek bir anahtar yeterlidir. Ziyaretçi tek adımda kanonik adrese gitmeli, HSTS ise her şey sorunsuz çalıştıktan sonra eklenmelidir.

HTTP → HTTPS yönlendirme neden 301 ile yapılmalı?

301, adresin kalıcı olarak taşındığını bildirir; arama motorları sıralama sinyallerini HTTPS adresine aktarır, tarayıcılar da yanıtı önbelleğe alır. 302 gibi geçici bir kod kullanıldığında şifresiz adres dizinde kalmaya devam edebilir. Doğru kurulmuş bir yönlendirme üç koşulu sağlar:

  1. Kalıcıdır: 301 (ya da istek yöntemini koruyan 308) kodu döner.
  2. Yolu korur: /urun?id=5 isteği ana sayfaya değil, aynı yolun HTTPS sürümüne gider.
  3. Tek adımdır: Ziyaretçi ara durak olmadan doğrudan kanonik adrese (ör. www’suz HTTPS) ulaşır.

Tarayıcılar 301 yanıtını uzun süre hatırladığından kuralı canlıya almadan önce curl ile denemek, yanlış bir hedefin ziyaretçilerin önbelleğine yerleşmesini önler. HTTPS geçişinin arama sonuçlarına etkisi SSL ve SEO ilişkisi yazısında ayrıntılı anlatılıyor.

Hangi platformda hangi yöntem kullanılır?

Sitenizin hangi web sunucusunda ya da panelde çalıştığını bilmek, doğru yöntemi seçmek için yeterlidir:

PlatformYöntemNerede
Apache / LiteSpeedmod_rewrite kuralıSite kökündeki .htaccess
Nginx80 portu server block’unda return 301/etc/nginx/sites-available/ altındaki site dosyası
IIS (Windows Server)URL Rewrite modülü kuralıSite kökündeki web.config
cPanelForce HTTPS Redirect anahtarıDomains ekranı
PleskPermanent SEO-safe 301 redirect from HTTP to HTTPSHosting & DNS → Hosting Settings
CDN ya da proxyKenar sunucudaki HTTPS zorlama seçeneğiCDN paneli (Cloudflare’de Always Use HTTPS)

Kuralı tek bir katmanda tutun. Panel anahtarı, .htaccess kuralı ve bir WordPress eklentisi aynı anda yönlendirme yaparsa zincirler ve döngüler kaçınılmaz olur.

.htaccess ile HTTPS yönlendirmesi nasıl yapılır?

Apache ve LiteSpeed sunucularda kural, site kökündeki .htaccess dosyasının en üstüne, WordPress’in # BEGIN WordPress bloğundan önce yazılır:

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

İkinci satır isteğin şifresiz geldiğini kontrol eder, üçüncü satır aynı ana makine adı ve yolla HTTPS adresine 301 döndürür. Sorgu dizesi (?id=5) mod_rewrite tarafından hedefe otomatik eklenir.

Site bir yük dengeleyici ya da CDN arkasındaysa ve proxy sunucuya HTTP ile bağlanıyorsa, %{HTTPS} her istekte off görünür ve kural sonsuz döngü (ERR_TOO_MANY_REDIRECTS) üretir. Bu durumda proxy’nin eklediği X-Forwarded-Proto başlığını da kontrol edin:

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Yönlendirme, bağlantı ne sunucuda ne de proxy’de şifreli olduğunda yapılır. Dosyanın diğer kullanım alanları için .htaccess kullanımı rehberine bakabilirsiniz.

Nginx’te HTTP → HTTPS yönlendirme nasıl yapılır?

Nginx’te yönlendirme, 80 portunu dinleyen ayrı bir server block’ta tek satırla yapılır; if ya da rewrite gerekmez:

server {
    listen 80;
    listen [::]:80;
    server_name ornek.com www.ornek.com;
    return 301 https://$host$request_uri;
}

$host istenen ana makine adını korur, $request_uri yolu ve sorgu dizesini birlikte taşır. Ziyaretçiyi tek adımda kanonik adrese göndermek için hedefi sabit yazın ve HTTPS’teki www sürümünü de ayrıca yönlendirin:

server {
    listen 80;
    listen [::]:80;
    server_name ornek.com www.ornek.com;
    return 301 https://ornek.com$request_uri;
}

server {
    listen 443 ssl;
    listen [::]:443 ssl;
    server_name www.ornek.com;
    ssl_certificate /etc/letsencrypt/live/ornek.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/ornek.com/privkey.pem;
    return 301 https://ornek.com$request_uri;
}

İkinci blok için sertifikanın www.ornek.com adını da kapsaması gerekir. certbot --nginx kullandıysanız certbot kendi yönlendirme bloğunu “managed by Certbot” yorumuyla eklemiş olabilir; aynı işi yapan ikinci bir kural yazmadan önce dosyayı kontrol edin, ardından sudo nginx -t ve sudo systemctl reload nginx çalıştırın. Nginx’in genel yapısı Ubuntu Nginx kurulumu rehberinde anlatılıyor.

IIS’te web.config ile HTTPS yönlendirmesi nasıl kurulur?

IIS’te yönlendirme, Microsoft’un ayrıca kurulan URL Rewrite modülüyle yapılır; modül yoksa <rewrite> bölümü içeren bir web.config 500 hatası verir. Site kökündeki web.config dosyasına şu kuralı ekleyin:

<configuration>
  <system.webServer>
    <rewrite>
      <rules>
        <rule name="HTTPS yonlendirme" stopProcessing="true">
          <match url="(.*)" />
          <conditions>
            <add input="{HTTPS}" pattern="^OFF$" />
          </conditions>
          <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Permanent" />
        </rule>
      </rules>
    </rewrite>
  </system.webServer>
</configuration>

{R:1} eşleşen yolu taşır, redirectType="Permanent" 301 kodunu üretir; sorgu dizesi varsayılan olarak korunur. Sitenin 443 portunda, sertifikası atanmış bir HTTPS bağlaması (binding) bulunmalıdır. SSL Settings ekranındaki Require SSL seçeneği yönlendirme yapmaz, şifresiz istekleri 403 hatasıyla reddeder; bu yüzden yönlendirme için kuralı kullanın. Sunucu tarafı IIS kurulumu rehberinde anlatılıyor; Plesk kullanan Windows aboneliklerinde aşağıdaki panel ayarı yeterlidir.

cPanel ve Plesk’te yönlendirme nasıl açılır?

Panel kullanan hosting hesaplarında kural yazmanız gerekmez; panel, web sunucusu yapılandırmasına doğru yönlendirmeyi kendisi ekler. İki panelde de önce geçerli bir sertifikanın kurulu olması gerekir.

  1. cPanel: Domains ekranını açın ve alan adının satırındaki Force HTTPS Redirect anahtarını açık konuma getirin. Geçerli sertifika yoksa anahtar kullanılamaz; LIONFIN cPanel hosting paketlerinde AutoSSL ücretsiz sertifikayı otomatik üretir.
  2. Plesk: Websites & Domains altında alan adının Hosting & DNS → Hosting Settings ekranını açın, Permanent SEO-safe 301 redirect from HTTP to HTTPS kutusunu işaretleyip kaydedin. Plesk hosting hesaplarında www tercihini aynı ekrandaki Preferred domain ayarı belirler.

Sayfa bazlı yönlendirmeler ve www kuralları için cPanel yönlendirme ayarları ile Plesk domain yönlendirme rehberlerine bakın.

Dikkat: Panel anahtarını açtıysanız aynı işi yapan .htaccess kuralını ya da WordPress eklentisini kaldırın; üst üste binen kurallar yönlendirme döngüsüne yol açar.

Yönlendirme zinciri nasıl önlenir, curl ile nasıl test edilir?

Kanonik adres https://ornek.com ise dört olası girişin tamamı tek adımda oraya ulaşmalıdır:

İstekBeklenen yanıt
http://ornek.com/301 → https://ornek.com/
http://www.ornek.com/301 → https://ornek.com/ (araya https://www girmeden)
https://www.ornek.com/301 → https://ornek.com/
https://ornek.com/200

Her satırı, tarayıcı önbelleğinden etkilenmeyen curl ile doğrulayın:

curl -I "http://www.ornek.com/urun?id=5"
curl -sIL "http://www.ornek.com/" | grep -iE "^(HTTP|location)"

İlk komutta 301 Moved Permanently durumunu ve Location: https://ornek.com/urun?id=5 satırını görmelisiniz. İkinci komut zinciri sonuna kadar izler; çıktıda birden fazla Location satırı varsa ara bir durak vardır ve kuralların hedefini sabit kanonik adrese çekmeniz gerekir. Sertifika uyarısı gibi diğer sorunlar için SSL hataları ve çözümleri rehberine bakın.

HSTS ne zaman ve nasıl eklenmeli?

HSTS (HTTP Strict Transport Security), tarayıcıya sitenizi belirtilen süre boyunca yalnızca HTTPS ile açmasını söyleyen bir yanıt başlığıdır. Başlığı görmüş bir tarayıcı, kullanıcı şifresiz adres yazsa bile sunucuya sormadan HTTPS’e geçer; böylece ilk istekteki şifresiz adım da ortadan kalkar. Tarayıcılar başlığı yalnızca HTTPS yanıtlarında dikkate alır.

Yönlendirmeler sorunsuz çalıştıktan sonra küçük bir süreyle başlayın:

# Nginx: 443 server block içine
add_header Strict-Transport-Security "max-age=300" always;

# Apache / LiteSpeed: .htaccess içine (mod_headers)
Header always set Strict-Transport-Security "max-age=300"

Birkaç gün sorun çıkmazsa süreyi kademeli olarak artırın; örneğin önce bir hafta, ardından bir yıl (max-age=31536000). includeSubDomains yönergesini yalnızca tüm alt alan adlarınız HTTPS destekliyorsa ekleyin. Tarayıcıların ön yükleme (preload) listesine girmek için en az bir yıllık süre, includeSubDomains ve preload yönergeleri gerekir; listeden çıkmak aylar sürebileceği için bu adımı en sona bırakın.

Dikkat: HSTS etkinken sertifikanın süresi dolarsa ziyaretçiler tarayıcı uyarısını geçemez ve siteye erişemez; otomatik yenilemenin çalıştığından emin olmadan uzun max-age kullanmayın.

Sık Sorulan Sorular

HTTPS yönlendirmesi SEO sıralamasını düşürür mü?

Doğru kurulmuş bir 301 yönlendirmesi sıralamayı düşürmez; arama motorları sinyalleri HTTPS adresine aktarır, geçiş sırasında yalnızca kısa süreli dalgalanmalar görülebilir. Riski azaltmak için tüm sayfaları tek adımda yönlendirin, site haritası ve canonical etiketlerini HTTPS adreslerle güncelleyin, dahili bağlantıları çevirin ve Search Console’da HTTPS mülkünü doğrulayın.

ERR_TOO_MANY_REDIRECTS hatası neden çıkar?

Genellikle iki kural birbirini hedefliyordur ya da sunucu bağlantının zaten şifreli olduğunu göremiyordur. En sık neden, CDN’in sunucuya HTTP ile bağlandığı esnek SSL modu ile sunucudaki HTTPS kuralının çakışmasıdır; CDN’de tam (full) modu seçin ya da X-Forwarded-Proto başlığını kontrol eden kuralı kullanın. Panel anahtarı, .htaccess kuralı ve WordPress site adresi arasındaki çelişkiler de aynı döngüyü üretir.

Yönlendirme için 301 mi 308 mi kullanmalıyım?

İkisi de kalıcı yönlendirmedir ve arama motorları ikisini de aynı şekilde değerlendirir. Fark, 308’in istek yöntemini ve gövdesini korumasıdır; POST ile gönderilen bir form 308 sonrasında da POST olarak iletilir. Web sayfaları için yaygın tercih 301’dir. Şifresiz adrese POST gönderen API istemcileriniz varsa 308 daha doğru sonuç verir, ama asıl çözüm istemcileri doğrudan HTTPS adresini kullanacak şekilde güncellemektir.

SSL sertifikası olmadan HTTPS yönlendirmesi yapılabilir mi?

Kural yazılabilir ama işe yaramaz: ziyaretçi HTTPS adresine gönderildiğinde tarayıcı geçerli bir sertifika bulamaz ve tam sayfa güvenlik uyarısı gösterir. Bu yüzden önce sertifikayı kurup HTTPS adresinin uyarısız açıldığını doğrulayın, yönlendirmeyi ondan sonra etkinleştirin. cPanel gibi paneller bu sırayı zaten zorunlu kılar ve sertifika yokken yönlendirme anahtarını kullanıma açmaz.

HSTS’i yanlışlıkla ekledim, nasıl geri alırım?

HTTPS yanıtlarında Strict-Transport-Security başlığını max-age=0 değeriyle gönderin; siteyi bu başlıkla yeniden ziyaret eden tarayıcılar kaydı siler. Siteyi tekrar ziyaret etmeyen tarayıcılarda kayıt, önceki max-age süresi dolana kadar kalır. Alan adınız ön yükleme listesine girdiyse ayrıca listeden çıkarma başvurusu yapmanız gerekir ve değişikliğin tarayıcı sürümlerine yansıması aylar sürebilir.

Bu makale yardımcı oldu mu?

Geri bildiriminiz için teşekkürler!

kişi faydalı buldu

Paylaş

X LinkedIn WhatsApp

Sorunuz mu var? Destek ekibimize yazın.