web-dev-qa-db-ja.com

htaccessはSSL / HTTPSでwww以外にwwwをリダイレクトします

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

たとえば、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]
8
Will

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

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]
10
Will

条件は暗黙的にANDされ、2番目の条件は(他のドメインがない限り)常に真になるため、現在のルールは非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.comhttps://www.example.comにリダイレクトするかどうかは、セキュリティ証明書によって異なります。 (.htaccessリダイレクトをトリガーするには、SSL経由でwwwとnon-wwwの両方からサイトにアクセスできる必要があります。)

5
MrWhite

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

例:http://domain.comhttps://domain.comへのリダイレクト

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

例:http://www.domain.comhttps://www.domain.comへのリダイレクト

RewriteEngine on

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