HSTS ve çift yönlendirme


9

Paylaşılan bir hosting LAMP ortamında küçük bir web sitesini yönetiyorum: bu temelde düzenleyebileceğim tek şey bir htaccess dosyası anlamına gelir.

HSTS desteği eklemek istedim (ve yaptım), ancak web sitemi burada HSTS önyükleme uygunluğu için test ettiğimde, aşağıdaki hatayı aldım:

Hata: HTTP önce www'ye yönlendiriyor

http://examplehttps://exampleWww alt etki alanını eklemeden önce (HTTP) hemen (HTTPS) öğesine yönlendirmelidir . Şu anda, ilk yönlendirme şudur: https://www.example.HSTS'yi destekleyen herhangi bir tarayıcının yalnızca alt alan adını değil, üst düzey alan adı için HSTS girişini kaydetmesini sağlamak için ekstra yönlendirme gereklidir.

Yani, kullanıcıları bu şekilde yönlendirmem gerektiğini düşünüyorum:

  1. http://example (kullanıcının tarayıcısının adres çubuğuna girdiği şey budur)
  2. https://example (onu web sitesinin HTTPS sürümüne yönlendiriyoruz)
  3. https://www.example (onu tekrar www alt alan adına yönlendiriyoruz)

Geçerli yönlendirmem şu şekilde yapılır:

RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]

Son satırdan önce bir yönlendirme eklemeye çalıştım, bu şekilde:

RewriteRule ^(.*)$ https://example.com/$1 [R,L]

ancak tarayıcıdan "sayfa düzgün bir şekilde yönlendirilmiyor" hatası aldım.

Peki, bir kullanıcıyı web sitesinin http sürümünden https'ye ve son olarak www ile https'ye yönlendirmenin doğru yolu nedir? Ve: herhangi bir risk var mı?

Yanıtlar:


10

Üzerinde belirtildiği gibi HSTS preload liste gönderme gereksinimleri :

  1. 80 numaralı bağlantı noktasını dinliyorsanız, aynı ana bilgisayarda HTTP'den HTTPS'ye yönlendirin.

Sadece ilk önce değil , aynı ana bilgisayara (yani. HTTP_HOST) Yönlendirmeniz gerekir example.com. example.comKullanıcı www.example.comdoğrudan istekte bulunuyorsa yönlendirmeniz gerekmez . (Test için bir istek yer alacaktır example.com.) Bundan sonra gerekirse kanonik www alt alanına yönlendirebilirsiniz.

Son satırdan önce bir yönlendirme eklemeye çalıştım, bu şekilde:

RewriteRule ^(.*)$ https://example.com/$1 [R,L]

Bu, bir yönlendirme döngüsü oluşturacaktır, çünkü önceki RewriteCondyönerge yalnızca birincisi için geçerlidir RewriteRule, böylece ikincisi RewriteRulekoşulsuz olarak çalışır.

Bunun yerine aşağıdakine benzer bir şey deneyin:

# HTTP to HTTPS redirect
RewriteCond %{SERVER_PORT} 80
RewriteRule (.*) https://%{HTTP_HOST}/$1 [R,L]

# Canonical www redirect
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule (.*) https://www.%{HTTP_HOST}/$1 [R,L]

HTTP_HOSTSunucu değişken değerini içeren HostHTTP istek başlığında (yani. İstenen ne olursa olsun ana bilgisayar).

2. yönlendirme durumları ... istenen ana makinenin başlamadığı tüm istekler için ana bilgisayara www.önek www.ekler. Ancak, doğal olarak www alt etki alanına yönlendirileceğinden, ayrı tutmak istediğiniz birden çok alt alanınız varsa (aynı yere çözümlenen) bu kabul edilemeyebilir.

Bunların 302 (geçici) yönlendirmeler olduğunu unutmayın. Yalnızca düzgün çalıştığından eminseniz 301 olarak değiştirin.

Ve: herhangi bir risk var mı?

Risk yok. Evet, potansiyel olarak iki yönlendirme vardır, ancak daha önce yalnızca bir tane olabilirdi (muhtemelen daha az verimli). Ancak hala SEO için mükemmel bir şekilde tamamlanan iki yönlendirme vardır. Ayrıca, HSTS ile kullanıcı aracısı en fazla bir kez çift yönlendirme deneyimi yaşayacaktır.


RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]

Bir kenara: (Şu an için HSTS'yi görmezden gelmek ...) Bu, kendi başına tamamlanmış olmazdı, çünkü bir talebi https://example.com/...(yani HTTPS ve etki alanı apeksi) kanonikleştirmez .


Daha fazla okuma:


Çok teşekkür ederim, yakında test edeceğim. Son bir kenara hızlı bir cevap: biri zaten çalışıyor ama doğrudan kontrol edemediğim bir şey gibi görünüyor (en azından htaccess dosyasında değil, en azından: barındırma sağlayıcı web sitesi yöneticisinde bir yönlendirme paneli var)

1
BTW, çözümünüz MÜKEMMEL çalışır! :-)

1
"Hosting sağlayıcı web sitesi yöneticisi yönlendirme paneli" - Ben her zaman bu tür araçlara karşı dikkatli olurdu. Örneğin, cPanel'deki yönlendirme bölümü çok sınırlıdır ve oldukça kötüdür.
MrWhite

1
Bu, Strict-Transport-Securityyanıt başlığını nasıl ayarladığınıza bağlıdır . Örneğin, bunu yeniden yönlendirmeye ayarlamak alwaysiçin Headeryönergede yer alan argümanı kullanmanız gerekir . "HSTS önyükleme " uygulaması hakkında daha fazla ayrıntıya giren Pro Webmaster yığını üzerinde ilgili bir soruyu cevapladım ( on/ ile ilgili cevabımın ilk bölümünü atla off) . .htaccess
MrWhite

1
Rica ederim. Dürüst olmak gerekirse, Pro Webmasters yığını muhtemelen .htaccesssadece ilgili sorular için daha uygundur (ServerFault sunucunun tam kontrolüne sahip olduğunuzu varsayar, bu durumda bunu yapmayacaksınız .htaccess). Bunu ayrı ayrı kapsayıcılar kullanarak sunucu yapılandırmasında uygulamak daha kolaydır<VirtualHost> (çünkü env değişkenleri ve ek koşullarla uğraşmanıza gerek yoktur - "temiz" ve hataya daha az eğilimlidir). Ben sadece erişiminiz varsa "önyükleme listesi" gönderilmesini tavsiye ederim sanmıyorum .htaccess. (Benim 2c)
MrWhite
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.