リダイレクト

 あるURLを指定して、ブラウザーでアクセスしたのに、結局なぜか別のURLに移っていたということはありませんか?よく、サイトのURLを変更する場合に使う方法ですね。これは、メタタグによるリダイレクトです。同様のことをCGIで実現することができます。具体的に見てみましょう。

メタタグ 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でもリダイレクトを使っています。その他、さまざまな使い道があろうかと思います。

2. リダイレクトの仕組み

 ブラウザーでCGIにアクセスすると、ブラウザーはリダイレクト情報を受け取ります。リダイレクト情報には、URLが記載されています。URLを受け取ったブラウザーは、そのURLのサーバに対してリクエストします。すると、そのURLのページが表示されるわけです。

CGIからみれば、URLを送っただけで、その後はブラウザー側で勝手に処理してくれるわけです。

















 
CGIアクセス
------------------------------------→

リダイレクト情報
←------------------------------------
Location: http://www.futomi.com/








リダイレクト先へリクエスト
------------------------------------→

レスポンス
←------------------------------------








3. Perlでリダイレクトする方法

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";

でいいのです。