Wymuszanie SSL i www w .htaccess

13

Szukam sposobu wymuszenia SSL i www.

Udało mi się wymusić oba oddzielnie, ale razem napotykam problemy z przekierowaniem. Poniższy kod działa podczas obsługi adresu URL w tym formacie: http://example.comi poprawnie przekierowuje na https://www.example.comadres URL, ale gdy przychodzący adres URL https://example.comnie zostanie przekazany dalej https://www.example.com- Jakieś sugestie?

EDYCJA: należy również wysłać http://www.example.comdo https://www.example.com.

RewriteCond %{REMOTE_ADDR} !127\.0\.0\.0
RewriteCond %{SERVER_PORT} 80
RewriteCond %{HTTP_HOST} !^www.example\.com$
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]
Stephen
źródło

Odpowiedzi:

7

Pierwszy wiersz służy do zapobiegania przepisywaniu wewnętrznych adresów URL. Może to powodować wyświetlanie różnych stron, więc go usunąłem.

Jeśli host jest example.comlub nie jest żądany przez HTTPS, zostanie przepisany na https://example.com/. To znaczy, przepisuje http://example.com, http://www.example.comi https://example.comaby https://www.example.comw jednej akcji.

RewriteCond %{HTTP_HOST} ^example\.com$ [OR]
RewriteCond %{HTTPS} !on
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]

Dokumentacja mod_rewrite dla Apache 2.2 .

Jeśli masz subdomeny forum.example.com, pierwsza reguła powinna być taka, jaka jest. W przeciwnym razie możesz również wykonać mecz negatywny www.example.com.

Lekensteyn
źródło
0

Czy trzecia linia nie musi być:

RewriteCond %{HTTP_HOST} ^example\.com$
Piers Karsenbarg
źródło
0

Spróbuj tego:

RewriteCond %{REMOTE_ADDR} !127\.0\.0\.0
RewriteCond %{SERVER_PORT} 80 [OR]
RewriteCond %{HTTP_HOST} !^www.example\.com$
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]
Arvin
źródło
0

Możesz także użyć następujących wierszy, których używam i działają bezbłędnie.

(Usuń górną RewriteCond, jeśli nie korzystasz z CloudFlare)

RewriteCond %{HTTP:CF-Visitor} '"scheme":"http"' [OR]
RewriteCond %{HTTPS} off
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=302]
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule .* https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=302]
zespół
źródło
0

Właśnie zaimplementowałem to w mojej witrynie. Działa jak marzenie! Dodano na początku mojego pliku .htaccess. Przekierowuje wszystkie wystąpienia osób wpisujących www lub nie www, http lub https.

# BEGIN HTTPS Redirect
RewriteEngine On 
RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]
# END HTTPS Redirect
użytkownik67283
źródło
0

Przetestowałem wszystkie powyższe sugestie, ale żadna nie obejmowała całego scenariusza.

Chciałem, aby odwiedzili go wszyscy goście https://www.example1.com/

Niektóre z kodów dostarczonych przez innych użytkowników działały w celu pobrania niezabezpieczonego i / lub nie-URL URL https://www.example1.com/, jednak żaden z nich nie obejmował https://example1.comrównież konwersji na „www”.

Mam swoją witrynę hostowaną w GoDaddy, na wypadek, gdyby miało to jakiekolwiek znaczenie.

Oto kod, który zadziałał dla mnie:

RewriteEngine On 
RewriteCond %{HTTP_HOST} !^www.example1\.com$ [OR]
RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://www.example1.com/$1 [L,R=301]

Ostatnia linia może być również:

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

Ale użyłem kodu „301”, aby wysłać wiadomość „ trwale przeniesiona ” w nadziei, że Google i być może inne wyszukiwarki zaktualizują stare linki.

onpre
źródło