私は共有ホスティング LAMP 環境で小さな Web サイトを管理しています。つまり、基本的に編集できるのは htaccess ファイルだけです。
HSTSサポートを追加したかったのですが(そして実際に追加しました)、ここでウェブサイトをテストしましたHSTS プリロードの適格性について、次のエラーが発生しました。
エラー: HTTP は最初に www にリダイレクトします
http://example
(HTTP) は、https://example
www サブドメインを追加する前に、すぐに (HTTPS) にリダイレクトする必要があります。現在、最初のリダイレクトは です。HSTShttps://www.example.
をサポートするすべてのブラウザがサブドメインだけでなくトップレベル ドメインの HSTS エントリを記録するようにするには、追加のリダイレクトが必要です。
したがって、次のようにユーザーをリダイレクトする必要があると思います。
http://example
(これはユーザーがブラウザのアドレスバーに入力するものです)https://example
(ウェブサイトの HTTPS バージョンにリダイレクトします)https://www.example
(再度サブドメイン www にリダイレクトします)
現在のリダイレクトは次のように行われます:
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]
次のように、最後の行の前にリダイレクトを追加してみました。
RewriteRule ^(.*)$ https://example.com/$1 [R,L]
しかし、ブラウザから「ページが正しくリダイレクトされていません」というエラーが表示されました。
では、ユーザーをウェブサイトの http バージョンから https へ、そして最終的に www 付きの https へリダイレクトする適切な方法は何でしょうか? また、リスクはあるのでしょうか?
答え1
記載の通り、HSTS プリロード リストの提出要件:
- ポート 80 でリッスンしている場合は、同じホスト上で HTTP から HTTPS にリダイレクトします。
リダイレクトする必要があります同じホスト(つまり、HTTP_HOST
) にリダイレクトする必要があります。ユーザーが直接リクエストしている場合は、example.com
にリダイレクトする必要はありません。(テストでは へのリクエストが行われます。) その後、必要に応じて正規の www サブドメインにリダイレクトできます。example.com
www.example.com
example.com
次のように、最後の行の前にリダイレクトを追加してみました。
RewriteRule ^(.*)$ https://example.com/$1 [R,L]
RewriteCond
前述のディレクティブは最初の にのみ適用されRewriteRule
、2 番目のディレクティブは無条件に実行されるため、リダイレクト ループが作成されますRewriteRule
。
代わりに次のようなことを試してください。
# HTTP to HTTPS redirect
RewriteCond %{SERVER_PORT} 80
RewriteRule (.*) https://%{HTTP_HOST}/$1 [R,L]
# Canonical www redirect
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule (.*) https://www.%{HTTP_HOST}/$1 [R,L]
サーバーHTTP_HOST
変数には、HTTP 要求ヘッダーの値Host
(つまり、要求されているホスト) が含まれます。
2 番目のリダイレクトは、要求されたホストが始まっていないすべての要求に対して、ホストにwww.
プレフィックスを付けることwww.
を示します。ただし、複数のサブドメイン (同じ場所に解決される) を別々に保持する必要がある場合、これらは自然に www サブドメインにリダイレクトされるため、これは受け入れられない可能性があります。
これらは 302 (一時的) リダイレクトであることに注意してください。正常に動作していることが確実な場合にのみ 301 に変更してください。
そして、リスクはあるのでしょうか?
リスクはありません。確かに、以前はリダイレクトが 1 つしかなかったのに、今後は 2 つになる可能性があります (効率が悪くなる可能性があります)。しかし、リダイレクトは 2 つだけなので、SEO にはまったく問題ありません。さらに、HSTS を使用すると、ユーザー エージェントが二重リダイレクトを経験するのは最大でも 1 回だけです。
RewriteCond %{SERVER_PORT} 80 RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]
余談:(HSTS は今のところ無視します...) これは、リクエストhttps://example.com/...
(つまり、HTTPS とドメインの頂点) を正規化しないため、それだけでは完全ではありません。
参考文献:
- Pro Webmasters SE の関連質問に対する私の回答では、HSTS の実装についてさらに詳しく説明しています
.htaccess
。https://webmasters.stackexchange.com/a/112264/52912