htaccessがSSL / HTTPSを使用してwww以外をwwwにリダイレクトする


10

すべてをhttps:// ANDに リダイレクトする書き換えルールが必要ですwww

たとえばhttp://example.comhttps://www.example.com

これは私が持っているものです:

RewriteEngine On
RewriteCond %{SERVER_PORT} !=443
RewriteCond %{HTTP_HOST} ^(www\.)?example\.com$ [NC]
RewriteRule ^(.*)$ "https\:\/\/www\.example\.com\/$1" [R=301,L]

回答:


11

私は解決策を見つけました。

HSTSなし(単一リダイレクト):

RewriteCond %{HTTP_HOST} !^www\.
RewriteRule .* https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteCond %{HTTPS} off
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

HSTS(ダブルリダイレクト):

RewriteCond %{HTTPS} off
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule .* https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

1
これは、リクエスト時にhttp://example.comHTTPと非wwwの2つのリダイレクトになることに注意してください。これは、最初に同じホスト上のHTTPSにリダイレクトされ(つまりなしwww)、次にwww2番目のリダイレクトとしてリダイレクトされるためです。この2つのルールを逆にするだけでこれを修正できます。
MrWhite 2018年

@MrWhite @HSTSをhttps://使用している場合は特に、実際に適切なリダイレクトでダブルリダイレクトが必要になります。このように、HSTS設定は、両方のドメインのブラウザーによって保存でき、その後の要求は常にデフォルトになりますhttps://
xsrf

@xsrf単一のwww および HTTPSリダイレクトを使用することは、依然として「適切」(かつより効率的)です。HSTSを実装する場合にのみ、個別にしておく必要があります。
MrWhite 2018

xsrfとMrWhiteの両方の良い点。答えを更新しました。
ウィル

@xsrf htaccess.madewithlove.beで二重リダイレクトを確認したところ、http://> https://のみがリダイレクトされ、wwwはリダイレクトされないようです
ウィル

6

条件は暗黙的にANDされ、2番目の条件は常にtrueになるため(他のドメインがない場合)、現在のルールは非SSLトラフィックのみをリダイレクトします。

OR条件を満たし、www(2番目の)条件を否定する必要があります。

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

場合はSERVER_PORT443ではない(すなわち。HTTPSではない)、またはホストが始まらないwww.(すなわち。あなたは裸のドメインにアクセスしている)、その後正規のURLにリダイレクトします。

ただし、これがリダイレクトhttps://example.comhttps://www.example.comれるかどうかは、セキュリティ証明書によって異なります。(.htaccessリダイレクトをトリガーするには、wwwと非wwwの両方でSSLを介してサイトにアクセスできる必要があります。)


1

これはwwwと非wwwの両方に使用します。wwwでリンクを開こうとすると、URLはwwwでhttpsにリダイレクトされます。

例:http://domain.comリダイレクトhttps://domain.com

または非wwwでリンクを開こうとすると、URLは非wwwでhttpsにリダイレクトされます。

例:http://www.domain.comリダイレクトhttps://www.domain.com

RewriteEngine on

RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

これは、質問で述べられているように、wwwからwww以外へのリダイレクトを処理しません。
MrWhite 2016年

この行はhtaccess RewriteCond%{HTTP_HOST}!^ www \に追加できます。RewriteRule ^(。*)$ {HTTP_HOST} / $ 1 [R = 301、L]
Ajay Patidar 2016

置き換えRewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] によってRewriteCond %{HTTP_HOST} !^www\. RewriteRule ^(.*)$ %{HTTP_HOST}/$1 [R=301,L]
アジャイPatidar

回答を編集できます。
MrWhite
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.