23時55分59秒 [Web関連]
WebサーバがApacheの場合、「.htaccess」ファイルにRedirectディレクティブを使ってリダイレクト先URLを記述することで、任意の場所へリダイレクトさせることができます。
その際、Redirectディレクティブのオプションとして、「permanent」とか「temp」とか記述することで、リダイレクト時のHTTPステータスコードを指定できます。
リダイレクトさせるときのHTTPステータスコードは、301か302です。
301は「Moved Permanently」で永続的な移転を示すステータスコードで、302は「Moved Temporarily」(HTTP1.1ではFound)で一時的な移転を示すステータスコードです。
ちなみに、以下のよーに書きます。
上記の場合、sakuraディレクトリは301で、tomoyoディレクトリは302でリダイレクトします。
このように、Redirectディレクティブを使う限り、このHTTPステータスコードは望みのままに指定可能です。
さて、本題はここからです。(^_^;)
Redirectではなく、mod_rewriteを使ってリダイレクトさせた場合は、どんなHTTPステータスコードが返されているのか?
リダイレクトさせたいんなら、そのものすばりなRedirectディレクティブを使えばいいわけですけど、mod_rewriteを使っても同じ動作が実現可能です。
たとえば、以下のよーな感じで。
上記のようにリライトルールを記述すれば、sakura.htmlファイルへのアクセスを指定のURLに飛ばすことができます。mod_rewriteは、実際には存在しないURLに仮想的な実体を与えるのに使う記述ですから、こんなリダイレクト用途に使うのは、本来の用途から外れているのかもしれませんが…。(^_^;) でもこう書けることは書けますよね。
で、このとき、果たしてどんなHTTPステータスコードが返されてリダイレクトされるのかな…?とちょいと疑問に思ったんです。
というわけで、HTTPレスポンスヘッダ確認ツールで調べてみました。
私のサーバ( www.nishishi.com )では、mod_rewriteを使ったリダイレクトでは、以下のようなHTTPレスポンスヘッダが返されるようです。
どうやら、HTTPステータスコードは、302(一時的な移転)が返されるようです。
301(永続的な移転)ではないのですね。
この結果が、どんな環境でも一緒なのかどうかは分かりませんが…。
ちなみに、本来の用途…というか、外部サイトへ飛ばすのではなく、自サイト内に仮想的なURLを作る用途でmod_rewriteを使った場合は、200が返されます。(そりゃそうだよな。^^;)
上記のレスポンスヘッダで、「302 Moved Temporarily」ではなく「302 Found」となっているのは、HTTP1.1だからですね。(まあHTTPの仕様的には、コードより後の文字列には何を出力しても構わないらしいですが。^^; 「302 MoeMoe」とかでも問題ないらしい。^^;;;)
HTTP1.1には「307 Temporary Redirect」というのがあって、これがまさに「一時的な移転」を示すんですけど、これを返さないのは、HTTP1.1で通信できないクライアントのためかな?
……ちょっと脱線。
まあつまり、mod_rewriteで外部サイトへ飛ばすよう記述すると、どうやら「302」でリダイレクトされるらしい、という結果でした。
Apacheのリファレンスによると、Redirectディレクティブを使ってステータスコードを省略した場合も、302が返されるようです。リダイレクト処理においては、302(一時的な移転)とするのがデフォルトの動作なんですかねー?
この日記へのコメントはお気軽に! コメント数:0件
コメント数: 0件