Mehmet

WFN Üye
Konular
1,851
Mesajlar
1,852
Çözüm
0
Ticaret Puanı
0
Üyelik
1 Ay 6 Gün
Konum
YurtDışı
Web Sitesi
Var
Alanı
Google Adsense
1/1
Konu sahibi
HTTP isteklerini HTTPS sürümüne yönlendirmek için, sitenin document root dizinindeki .htaccess dosyasına aşağıdaki kuralı ekleyebilirsiniz:

Kod:
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://example.com%{REQUEST_URI} [R=301,L]

Örnek, TLS doğrudan Apache üzerinde sonlanıyorsa uygundur. Hedefteki example.com yerine kendi kanonik alan adınızı yazın. İlk denemede R=301 yerine R=302 kullanıp sonucu doğrulayın. Kural yalnızca Apache bağlantısı HTTPS değilse çalışır. Böylece http://example.com/urun?id=15 isteği https://example.com/urun?id=15 adresine yönlendirilir. Hedefte ayrı bir sorgu dizesi belirtilmediği için mevcut sorgu parametreleri korunur.

Kural nasıl çalışır?​


RewriteEngine On, mod_rewrite motorunu etkinleştirir. RewriteCond %{HTTPS} !=on koşulu, mevcut isteğin HTTPS üzerinden gelmediğini kontrol eder. HTTPS isteğinde koşul sağlanmadığı için yönlendirme tekrar uygulanmaz.

Hedef alan adı sabittir; istemciden gelen Host başlığı hedefe yansıtılmaz. %{REQUEST_URI} URL yolunu taşır. [R=301,L] içindeki R=301 kalıcı harici yönlendirme yapılmasını, L ise mevcut rewrite işleminde bu kuraldan sonra devam edilmemesini belirtir.

Basit bir HTTP-HTTPS geçişinde mod_rewrite zorunlu değildir. Ana Apache yapılandırmasına veya sanal host ayarlarına erişiminiz varsa yalnızca HTTP sanal hostunda Redirect permanent kullanmak daha temiz olabilir. .htaccess, özellikle hosting ortamında ana yapılandırmayı değiştirme yetkiniz olmadığında uygundur.

KurulumHTTPS bilgisinin kaynağıÖn koşul
TLS Apache üzerindeHTTPS sunucu değişkeniSertifika ve HTTPS sanal hostu çalışıyor
TLS proxy/CDN üzerindeProxy tarafından yeniden yazılan başlıkOrigin sadece güvenilen proxyye açık
.htaccess kullanılamıyorAna sunucu/hosting ayarıSağlayıcı yapılandırma desteği

Uygulama ve test adımları​


  1. HTTPS adresini yönlendirme eklemeden önce doğrudan açın. Sertifika veya HTTPS sanal hostu çalışmıyorsa yönlendirme, kullanıcıyı erişilemeyen bir adrese gönderir.
  2. Mevcut .htaccess dosyasının yedeğini alın. Dosya yoksa document root dizininde başında nokta bulunan .htaccess adında bir dosya oluşturun.
  3. Yukarıdaki kuralı mevcut kurallarla çakışmayacak bir konuma ekleyin. Dosyada zaten RewriteEngine On varsa ikinci kez yazmanız gerekmez.
  4. AllowOverride None dosyanın yok sayılmasına neden olur. Dosya okunuyor fakat yönergeye izin verilmiyorsa 500 hatası da oluşabilir. Rewrite için AllowOverride FileInfo veya eşdeğer açık izin ve etkin mod_rewrite gerekir; bunları sağlayıcı belirler.
  5. Önce http://example.com/ ve bir alt sayfayı, sonra doğrudan HTTPS adreslerini test edin. İlk testte 302, kalıcı geçişte 301 yanıtını ve HTTPS son hedefini kontrol edin. Sorgu parametreli, alt dizinli ve kodlanmış karakter içeren gerçek URL örneklerini de deneyin.
  6. Sitedeki sabit HTTP kaynaklarını HTTPS olarak güncelleyin. Resim, CSS veya JavaScript dosyaları HTTP üzerinden çağrılırsa karma içerik uyarısı oluşabilir.

Kalıcı yönlendirmeyi test ederken tarayıcı önbelleğini hesaba katın. Daha önce kaydedilmiş 301 sonuçları nedeniyle kural değişikliğinin etkisini göremiyorsanız özel pencere kullanın veya komut satırıyla yeni bir istek gönderin.

Proxy veya CDN arkasında kullanım​


TLS işlemi Apache yerine bir CDN, ters proxy veya yük dengeleyicide sonlandırılıyorsa Apache arka taraftaki bağlantıyı HTTP görebilir. Bu durumda %{HTTPS} koşulu her isteği yönlendirip döngü oluşturabilir.

Aşağıdaki alternatif yalnız origin sunucuya sadece güvenilen proxy ulaşabiliyorsa ve proxy X-Forwarded-Proto başlığını her istekte yeniden yazıyorsa kullanılabilir. Doğrudan TLS kuralıyla birlikte gelişigüzel eklemeyin:

Kod:
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} =http [NC]
RewriteRule ^ https://example.com%{REQUEST_URI} [R=301,L]

Bu başlığa doğrudan istemciden geldiği hâliyle güvenmeyin. Yalnızca kullandığınız proxy’nin başlığı kendisinin ayarladığından ve dışarıdan gelen değeri kabul etmediğinden eminseniz bu koşulu kullanın. Proxy yapılandırması belirsizse sağlayıcının HTTPS sonlandırma ve origin bağlantı belgelerine göre hareket edin.

Sık yapılan hatalar​


  • HTTPS sertifikasını ve HTTPS sanal hostunu doğrulamadan yönlendirme eklemek.
  • HTTPS koşulu olmadan her isteği koşulsuz olarak HTTPS’e yönlendirmek; bu, döngü oluşturabilir.
  • Aynı dosyada birden fazla HTTPS kuralı kullanmak; mevcut yönlendirmelerle birlikte zincir veya çakışma oluşabilir.
  • Proxy arkasında %{HTTPS} değerini yanlış yorumlamak ve X-Forwarded-Proto başlığını güvenilmeyen istemci verisi olarak kabul etmek.
  • 301 kuralını sık sık değiştirip tarayıcı önbelleğini göz ardı etmek.
  • HTTPS’e geçişten sonra site içindeki HTTP kaynaklarını güncellememek.

Alt dizindeki bir site için .htaccess dosyasının bulunduğu dizin önemlidir. RewriteRule kalıbı .htaccess bağlamında başında eğik çizgi olmayan, bulunduğu dizine göreli yolu eşleştirir. Bu nedenle dosyayı sitenin gerçek köküne koyun ve alt dizin kurulumunu ayrıca test edin.

Sık sorulan sorular​


301 yerine 302 ile başlamak daha güvenli mi?​


Kuralı kısa süreli deniyorsanız 302, kalıcı geçiş tamamlandıktan sonra 301 kullanabilirsiniz. Ancak tarayıcı ve istemci önbellekleri nedeniyle 301’e geçmeden önce hedef davranışı dikkatle doğrulamak gerekir.

301 yönlendirmesi POST isteğinin yöntemini korur mu?​

Bunu garanti etmez. İstemciler 301 sonrasında POST isteğini GET olarak gönderebilir. Yöntemin ve gövdenin korunması gereken uçlarda 308 gibi uygun durum kodunu ayrıca değerlendirin; form veya API akışını yalnız bir GET sayfasıyla test etmeyin.
 

Sende şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Konuyu görüntüleyenler

Bu konuyu şu anda görüntüleyen üye bulunmuyor.
Robotlar:
  • Anthropic