CGI講座 ≫ リダイレクト
リダイレクトって?
リダイレクトとは、指定したWebページから他のページへ自動的に移動することです。
リダイレクト自体はhtaccessやHTMLのタグ、JavaScriptでも可能ですが、ここではCGIプログラムの中でリダイレクトを行う方法を紹介します。
Perlでリダイレクト
Perlの場合、次のように使います。
print "Location: 飛び先のURL\n\n";
URLの後に\n(改行を表す)を2回入れるのを忘れずに。
このprint文を呼び出す前に何か出力しても、次に飛んだURLの出力内容によってすぐ消されてしまいます。
テストしてみましょう。
呼び出される側を用意します。HTMLファイル、CGIどちらでもかまいません。用意してみましょう。前と同じです。CGIファイルだったらこんなカンジで。
#!/usr/local/bin/perl
print "Content-type: text/html\n\nテスト";
1;
test.cgiとでもしておきましょう。
ドキュメントルートの中の適当な場所において下さい。
では、呼び出す側を用意してみましょう。redirect.cgiとします。
#!/usr/local/bin/perl
print "Location: http://www.aaa.co.jp/cgi-bin/test.cgi\n\n";
1;
実行してみましょう。
リダイレクトでは指定したURLへ飛んでしまうので、URLを呼び出した元のCGIのURLはブラウザのアドレスの部分に表示されません。リダイレクト先のURLが表示されているはずです。
飛び先は当然別のサーバでもかまいません。
Googleへ飛びたいときは
print "Location: http://google.com/\n\n";
とします。
また、同じサーバ内の移動の場合は、ドキュメントルートからの絶対パスや、相対パス指定でもいけます。
print "Location: /cgi-bin/test.cgi\n\n";
print "Location: test.cgi\n\n";
PHPでリダイレクト
PHPの場合、次のように使います。
header('Location: 飛び先のURL');
この直後に必ずexit;を入れる事が重要です。
この文を呼び出す前に何か出力しても、次に飛んだURLの出力内容によってすぐ消されてしまいます。
テストしてみましょう。
リダイレクト先はgoogleにします。
では、呼び出す側を用意してみましょう。redirect.phpとします。
<?php
header('Location: http://google.com/');
exit;
?>
実行してみましょう。
リダイレクトでは指定したURLへ飛んでしまうので、URLを呼び出した元のCGIのURLはブラウザのアドレスの部分に表示されません。リダイレクト先のURLが表示されているはずです。
飛び先は当然同じサーバでもかまいません。
また、同じサーバ内の移動の場合は、ドキュメントルートからの絶対パスや、相対パス指定でもいけます。
header('Location: /cgi-bin/test.php');
header('Location: test.php');

PerlでもPHPでも、リダイレクトで注意することは、リダイレクトしたあとで何か出力しても何もならないということです。
ただし!
何もならない、だけならいいのですが、処理そのものは行ってしまいます。 場合によっては予期しない動作を引き起こすことがあるので、リダイレクト直後は必ずそのプログラムを終了することを忘れずに!
あとはリダイレクト先を間違えて何度もリダイレクトを繰り返すようなことがおこらないようにしましょう。大体はサーバの設定で何度目かで止まるはずですが、迷惑なので気をつけましょう。