Webページをリダイレクトする方法
Webアプリを作っていると、意図的にページをリダイレクトしたい状況ってのがあります。
例えば、ログインを必要とするページに認証されていないリクエストが来た場合に、ログインページへリダイレクトするとかですね。
そんなわけで、Webページをリダイレクトする方法の覚え書きです。
なお、検証は Windows XP SP3 上の Firefox 3.5.7 で行いました。また、リダイレクト先のサンプルURLとして「http://www.mukairiku.net/」を指定しています。
まず最も高速で、ユーザーがリダイレクトを止められないと思われるのが、HTTPレスポンスヘッダーを使う方法です。
やり方は簡単で、「Location: リダイレクトしたいURL」というヘッダーを返すだけです。PerlでCGIプログラムを書くと、
こんな感じになります。この場合、通常の「Content-type: text/html」というヘッダーは出力しません。
お次はJavaScriptを使う方法です。HTMLファイルのHEADタグ内に書くと、ページを表示する前にリダイレクトしてくれます。
location.href='http://www.mukairiku.net/';
</script>
JavaScriptを使うメリットとしては、クライアントサイドでプログラミングできることに尽きるかと思います。
ページを表示させたあとでリダイレクト先を変えたりとか、任意のタイミングでリダイレクトさせたりとか。ボタンと組み合わせてアンカータグの代わりに使うって手もあります。
デメリットは、ブラウザのJavaScriptがOFFになってると動かないことですね。当たり前ですけど。
最後は(X)HTMLのMETAタグを使う方法です(サンプルはXHTMLで記述)。
通常はこれをHTMLファイルのHEADタグ内に書きます。FirefoxだとBODYタグ内に書いても動きましたが、他のブラウザでは未確認です。
メリットは、JavaScriptがOFFでも動くことですね。CONTENT属性の最初に指定する数字(上の例だと'0')で、ページを表示してからリダイレクトするまでの秒数を指定できます。
ただし、一旦ページを表示してからリダイレクトするため、ユーザーにリダイレクトを意識させたくない場合には不向きかと。
逆に「〇秒後にホゲホゲのページにジャンプします」といった場合には便利ですね。
その他、Apache HTTP Serverの機能を使う方法もありますが、自分がまず使わないので、今回はパスということで。
追記:2011/05/21
Apache の .htaccess を使用したリダイレクトについては、こちらの記事をご参照ください。