回答:
私は解決策を見つけました。
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]
https://
使用している場合は特に、実際に適切なリダイレクトでダブルリダイレクトが必要になります。このように、HSTS設定は、両方のドメインのブラウザーによって保存でき、その後の要求は常にデフォルトになりますhttps://
条件は暗黙的に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_PORT
443ではない(すなわち。HTTPSではない)、またはホストが始まらないwww.
(すなわち。あなたは裸のドメインにアクセスしている)、その後正規のURLにリダイレクトします。
ただし、これがリダイレクトhttps://example.com
さhttps://www.example.com
れるかどうかは、セキュリティ証明書によって異なります。(.htaccessリダイレクトをトリガーするには、wwwと非wwwの両方でSSLを介してサイトにアクセスできる必要があります。)
これは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]
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
によってRewriteCond %{HTTP_HOST} !^www\. RewriteRule ^(.*)$ %{HTTP_HOST}/$1 [R=301,L]
http://example.com
HTTPと非wwwの2つのリダイレクトになることに注意してください。これは、最初に同じホスト上のHTTPSにリダイレクトされ(つまりなしwww
)、次にwww
2番目のリダイレクトとしてリダイレクトされるためです。この2つのルールを逆にするだけでこれを修正できます。