あるURLを指定して、ブラウザーでアクセスしたのに、結局なぜか別のURLに移っていたということはありませんか?よく、サイトのURLを変更する場合に使う方法ですね。これは、メタタグによるリダイレクトです。同様のことをCGIで実現することができます。具体的に見てみましょう。
どちらの場合も、このサイトのトップページにリダイレクトされます。メタタグによるリダイレクトには、HTMLファイルの<HEAD>タグ内に、
<META HTTP-EQUIV="Refresh" CONTENT="5; URL=http://www.futomi.com/" />
と書いておけばいいのです。上の例では5秒後に http://www.futomi.com/
にリダイレクトします。ここでは、CGIを使ったリダイレクトの方法を説明します。
CGIにおいて、リダイレクトの使い道はいくつかあります。たとえば、アンケートやメール送信フォームで、送信した後に、「ありがとう」ページを表示するにはどうすればいいでしょう。
一つの手としては、CGIによって「ありがとう」ページを出力させることができます。ただこの方法だと、もし「ありがとう」ページを更新したい場合には、CGIスクリプト自体を書き換えてあげなければいけません。もちろんFrontPageやホームページビルダーのようなホームページ作成ツールを使って書き換えることはできません。もし定期的に更新したい場合などは、非常に手間がかかります。
もう一つの手として、リダイレクトがあるのです。リダイレクトするためには、その「ありがとう」ページを事前に作成しておく必要があります。ただ単に、HTMLファイルを作成すればよいのです。これをサーバにアップロードします。そして、CGI側で、その「ありがとう」ページのURLへリダイレクトするようにプログラムしておけば実現できます。こうすることによって、CGIスクリプトを簡潔にすることもできますし、リダイレクト先ページの更新も、CGIを変更することなく実現可能なわけです。
このサイトの「Contact Me」コーナーでも、メール送信後、「ありがとう」ページにリダイレクトしてます。また、このサイトで公開しているダウンロードランキングCGIでもリダイレクトを使っています。その他、さまざまな使い道があろうかと思います。
ブラウザーでCGIにアクセスすると、ブラウザーはリダイレクト情報を受け取ります。リダイレクト情報には、URLが記載されています。URLを受け取ったブラウザーは、そのURLのサーバに対してリクエストします。すると、そのURLのページが表示されるわけです。
CGIからみれば、URLを送っただけで、その後はブラウザー側で勝手に処理してくれるわけです。
|
CGIアクセス
------------------------------------→
リダイレクト情報
←------------------------------------
Location: http://www.futomi.com/ |
|
リダイレクト先へリクエスト
------------------------------------→
レスポンス
←------------------------------------ |
|
|
HTTPの仕様では、もともとリダイレクトに関して定義されています。よくPerlスクリプトでページを出力する際に、
print "Content-type: text/html\n\n";
と書きますね。これはHTTPヘッダーの一部なのですが、この代わりに、
print "Location: リダイレクトしたいURL\n\n";
と書けばいいのです。たとえば、http://www.futomi.com/
にリダイレクトしたい場合には、
print "Location: http://www.futomi.com/\n\n";
でいいのです。