- Konu sahibi
- #1
HTTP isteklerini HTTPS sürümüne yönlendirmek için, sitenin document root dizinindeki
Ö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
Hedef alan adı sabittir; istemciden gelen Host başlığı hedefe yansıtılmaz.
Basit bir HTTP-HTTPS geçişinde
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.
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
Aşağıdaki alternatif yalnız origin sunucuya sadece güvenilen proxy ulaşabiliyorsa ve proxy
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.
Alt dizindeki bir site için
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.
.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.| Kurulum | HTTPS bilgisinin kaynağı | Ön koşul |
|---|---|---|
| TLS Apache üzerinde | HTTPS sunucu değişkeni | Sertifika ve HTTPS sanal hostu çalışıyor |
| TLS proxy/CDN üzerinde | Proxy tarafından yeniden yazılan başlık | Origin sadece güvenilen proxyye açık |
| .htaccess kullanılamıyor | Ana sunucu/hosting ayarı | Sağlayıcı yapılandırma desteği |
Uygulama ve test adımları
- 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.
- Mevcut
.htaccessdosyasının yedeğini alın. Dosya yoksa document root dizininde başında nokta bulunan.htaccessadında bir dosya oluşturun. - Yukarıdaki kuralı mevcut kurallarla çakışmayacak bir konuma ekleyin. Dosyada zaten
RewriteEngine Onvarsa ikinci kez yazmanız gerekmez. AllowOverride Nonedosyanın yok sayılmasına neden olur. Dosya okunuyor fakat yönergeye izin verilmiyorsa 500 hatası da oluşabilir. Rewrite içinAllowOverride FileInfoveya eşdeğer açık izin ve etkin mod_rewrite gerekir; bunları sağlayıcı belirler.- Ö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. - 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 veX-Forwarded-Protobaş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.