HSTSと二重リダイレクト

HSTSと二重リダイレクト

私は共有ホスティング LAMP 環境で小さな Web サイトを管理しています。つまり、基本的に編集できるのは htaccess ファイルだけです。

HSTSサポートを追加したかったのですが(そして実際に追加しました)、ここでウェブサイトをテストしましたHSTS プリロードの適格性について、次のエラーが発生しました。

エラー: HTTP は最初に www にリダイレクトします

http://example(HTTP) は、https://examplewww サブドメインを追加する前に、すぐに (HTTPS) にリダイレクトする必要があります。現在、最初のリダイレクトは です。HSTShttps://www.example.をサポートするすべてのブラウザがサブドメインだけでなくトップレベル ドメインの HSTS エントリを記録するようにするには、追加のリダイレクトが必要です。

したがって、次のようにユーザーをリダイレクトする必要があると思います。

  1. http://example(これはユーザーがブラウザのアドレスバーに入力するものです)
  2. https://example(ウェブサイトの HTTPS バージョンにリダイレクトします)
  3. 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 プリロード リストの提出要件:

  1. ポート 80 でリッスンしている場合は、同じホスト上で HTTP から HTTPS にリダイレクトします。

リダイレクトする必要があります同じホスト(つまり、HTTP_HOST) にリダイレクトする必要があります。ユーザーが直接リクエストしている場合は、example.comにリダイレクトする必要はありません。(テストでは へのリクエストが行われます。) その後、必要に応じて正規の www サブドメインにリダイレクトできます。example.comwww.example.comexample.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 とドメインの頂点) を正規化しないため、それだけでは完全ではありません。


参考文献:

関連情報