HSTSと二重リダイレクト


9

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

HSTSサポートを追加したかった(そして私はそれを行いました)が、HSTSプリロードの適格性についてここ自分のWebサイトをテストする、次のエラーが発生しました。

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

http://example(HTTP)はhttps://example、wwwサブドメインを追加する前に、すぐに(HTTPS)にリダイレクトする必要があります。現在、最初のリダイレクトは次のhttps://www.example.とおりです。HSTSをサポートするブラウザがサブドメインだけでなく、トップレベルドメインの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にリダイレクトする適切な方法は何でしょうか。そして:リスクはありますか?

回答:


10

HSTSプリロードリストの提出要件に記載されているとおり:

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

最初にリダイレクトするのではなく、同じホスト(つまりHTTP_HOST)にリダイレクトする必要がありexample.comます。example.comユーザーがwww.example.com直接リクエストしている場合は、リダイレクトする必要はありません。(テストにはへのリクエストが含まれexample.comます。)その後、必要に応じて正規のwwwサブドメインにリダイレクトできます。

次のように、最後の行の前にリダイレクトを追加しようとしました:

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サーバ変数は、値が含まれているHostHTTPリクエストヘッダ(すなわち、要求されているものは何でもホスト)。

2番目のリダイレクト状態...要求されたホストが開始しないすべての要求の場合、ホストのwww.接頭辞www.。ただし、複数のサブドメイン(同じ場所に解決される)を分離して保持したい場合は、当然wwwサブドメインにリダイレクトされるため、これは受け入れられない場合があります。

これらは302(一時的な)リダイレクトであることに注意してください。正常に機能していることが確実な場合にのみ、301に変更します。

そして:リスクはありますか?

リスクなし。はい。リダイレクトは2つある可能性がありますが、以前は1つしかなかった可能性があります(これはおそらく非効率的です)。しかし、リダイレクトはまだ2つしかなく、SEOにとってはまったく問題ありません。その上、HSTSを使用すると、ユーザーエージェントは一度に2回だけリダイレクトを経験します。


RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]

余談:(現時点ではHSTSを無視しています...)https://example.com/...(HTTPSとドメイン頂点などの)リクエストを正規化しないため、これだけでは完全ではありません。


参考文献:


どうもありがとうございました。すぐにテストします。最後のAsideへの簡単な返信:いずれにしても機能しますが、直接制御できないもののようです(htaccessファイルではなく、少なくとも:ホスティングプロバイダーのWebサイトマネージャーにリダイレクトパネルがあります)

1
ところで、あなたのソリューションは完全に機能します!:-)

1
「ホスティングプロバイダーのウェブサイトマネージャーのリダイレクトパネル」-私は常にそのようなツールに警戒しています。たとえば、cPanelのリダイレクトセクションは非常に制限されており、かなり悪名高くなっています。
MrWhite 2018

1
これは、Strict-Transport-Security応答ヘッダーの設定方法によって異なります。たとえば、リダイレクトでこれを設定するにはalwaysHeaderディレクティブの引数を使用する必要があります。での「HSTS プリロード」の実装について詳しく説明している、Pro Webmastersスタックで関連する質問に回答しましたon/ に関する私の回答の最初の部分はスキップしてくださいoff)。.htaccess
MrWhite 2018

1
どういたしまして。正直に言うと、Pro Webmastersスタックは、.htaccess関連する質問のみにおそらくより適しています(ServerFaultは、サーバーを完全に制御できると想定しています。その場合、これはで実行しません.htaccess)。個別のコンテナーを使用してサーバー構成にこれを実装するが間違いなく簡単<VirtualHost>です(環境変数や追加の条件をいじる必要がないため、「クリーン」でエラーが発生しにくくなります)。へのアクセスしか持っていない場合は、「プリロードリスト」の送信をお勧めしません.htaccess。(私の2c)
MrWhite 2018
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.