WordpressサイトをwwwからWWWに、SSLからSSLに完全にリダイレクトしようとしています。
私が使用しているコードは次のとおりです。
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_Host}%{REQUEST_URI} [L,R=301]
RewriteEngine On
RewriteCond %{HTTP_Host} ^example\.com [NC]
RewriteRule ^(.*)$ https://www.example.com/$1 [L,R=301]
コードが正しいのか、それとももっと良い方法ができるのか疑問に思います。つまり、うまくいくように見えますが、PageSpeedは、このような多くのリダイレクトを避けるべきだと言っています。
編集:だからそれはそのように見えるはずです:
RewriteEngine On
RewriteCond %{HTTP_Host} ^example\.com [NC]
RewriteRule ^(.*)$ https://www.example.com/$1 [L,R=301]
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_Host}%{REQUEST_URI} [L,R=301]
?
EDIT2:
RewriteEngine On
RewriteCond %{HTTP_Host} ^static.example\.com [NC]
RewriteRule (.*) https://static.example.com/$1 [L,R=301]
RewriteCond %{HTTPS} !=on
RewriteRule .* https://%{HTTP_Host}%{REQUEST_URI} [L,R=301]
HSTS を実装する場合は、完全に問題なく、同じホストでHTTPSにリダイレクトすることにより、そのように実装する必要があります。
ただし、http://example.com
を要求するときに二重リダイレクトを排除するには、これら2つのルールを逆にする必要があります。そうしないと、次の二重リダイレクトが発生します。
http://example.com
からhttps://example.com
tohttps://www.example.com
例えば:
RewriteEngine On
RewriteCond %{HTTP_Host} ^example\.com [NC]
RewriteRule (.*) https://www.example.com/$1 [L,R=301]
RewriteCond %{HTTPS} !=on
RewriteRule .* https://%{HTTP_Host}%{REQUEST_URI} [L,R=301]
RewriteEngine
ディレクティブを繰り返す必要はありません。
置換で使用されていない場合、後方参照(つまり、(.*)
)をキャプチャする必要はありません。アンカー^
および$
は、正規表現がデフォルトで貪欲なので、必要ありません。
上記の規則間のもう1つの「スタイル」の不一致は、最初のRewriteRule
でキャプチャされた後方参照($1
)を使用し、2番目でREQUEST_URI
サーバー変数を使用していることです。 2つの異なる方法で同じことを行うため、動作に違いはありません。しかし、それらは2つの異なる「スタイル」です(2人の異なる人々によって書かれたように)。
EDIT2:
サブドメインもあります-
static.example.com
(www以外)。ここにSSLを追加し、WWWを非WWWにリダイレクトします(現在、ユーザーはwwwからもサイトにアクセスでき、最終的にwww.static.example.com
などのURLになります)。 EDIT2のようなものを試しました(投稿を編集したばかりです)。そのコードの何が問題なのか教えてもらえますか?RewriteCond %{HTTP_Host} ^static.example\.com [NC] RewriteRule (.*) https://static.example.com/$1 [L,R=301] RewriteCond %{HTTPS} !=on RewriteRule .* https://%{HTTP_Host}%{REQUEST_URI} [L,R=301]
ここでの最初のルールは、static.example.com
をstatic.example.com
にリダイレクトすることです(つまり、変更なし)-これにより、自然に終わることのないリダイレクトループが発生します(ブラウザーは最終的にエラーで中断します)。
fromwww.static.example.com
をリダイレクトする場合は、RewriteCond
ディレクティブでこれを確認する必要があります。例えば:
RewriteCond %{HTTP_Host} ^www\.static\.example\.com [NC]
RewriteRule (.*) https://static.example.com/$1 [L,R=301]
あなたがそうであるかどうかはわかりませんが、HTTPからHTTPSへのリダイレクトを繰り返す必要はありません-ディレクティブを正しい順序に並べてください。
したがって、要約すると、両方のリダイレクトが一緒になります:
RewriteEngine On
# Main domain non-www to www redirect
RewriteCond %{HTTP_Host} ^example\.com [NC]
RewriteRule (.*) https://www.example.com/$1 [L,R=301]
# Subdomain www to non-www redirect
RewriteCond %{HTTP_Host} ^www\.static\.example\.com [NC]
RewriteRule (.*) https://static.example.com/$1 [L,R=301]
# HTTP to HTTPS redirect
RewriteCond %{HTTPS} !=on
RewriteRule .* https://%{HTTP_Host}%{REQUEST_URI} [L,R=301]