http→httpsリダイレクトで301と設定してるのに307となってしまう問題
httpサイトをhttpsサイトに変更する機会がありました。 Apacheの設定でhttpでアクセスがあったらhttpsに301ステータスでリダイレクトとしていました。 設定は下記の通りです。
RewriteEngine On RewriteCond %{SERVER_PORT} !^443$ RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L]
しかしGoogle Dev Toolで確認してみると307ステータスでリダイレクトしているようでした。
どうやら原因はHSTSでした。
HSTSとは?
WebサーバーがWebブラウザに対して、セキュアなHTTPSのみでサービスを提供したい場合、ユーザーの利便性といった観点から、HTTPで接続した際にHTTPSのURIにリダイレクトする場合がある。その際に、Webサーバーからのレスポンスにリダイレクトする指示を入れることになるが、HTTPは改竄検知機能を持たないため、攻撃者がこれを悪意のあるサイトにリダイレクトする指示に書き換えたとしても、Webブラウザはそれを知ることができず、中間者攻撃を許してしまう。 HSTSではユーザーがWebブラウザにスキームがhttpであるURIを入力するなどしてHTTPで接続しようとした時に、予めWebサーバーがHSTSを有効にするよう指示してきたドメインの場合、Webブラウザが強制的にHTTPSでの接続に置き換えてアクセスすることで、この問題を解決する。
HTTP Strict Transport Security - Wikipedia
ユーザの利便性のためにHSTSを設定していたのですが、このリダイレクトのせいで307となっていたのですね。
ただこの307はGoogleは301と認識するようです。
GoogleウェブマスターツールのFetch as Googleで実施したところちゃんと301ステータスになっていました。
一安心です。