PHPのheader関数で301などHTTPステータスコードを指定してリダイレクトする

更新:

PHPのheader関数で301・302などHTTPステータスコードを指定してリダイレクトする例。

header関数

PHPのheader関数の使い道はいろいろあるが、私はリダイレクトするときによく使う。
以下の例は同じ階層にある example.php へリダイレクトしている。
header('Location: example.php');
exit;
リダイレクトする際は、この後の処理を行わないように exit で処理を終了しておく。
Locationにはパスを指定したり、URLを指定して別のサイトへリダイレクトすることもできる。
header('Location: /test/example.php?id=on');
exit;
header('Location: http://www.example.com/');
exit;
header関数はHTML等を出力する前に実行する必要がある点に注意する。


HTTPステータスコードを指定する

header関数に転送先を書いただけの場合、HTTPステータスコード(レスポンスコード)は302でリダイレクトされる。
header関数にHTTPステータスコードを指定したい場合は以下のように書く。
header('Location: example.php', true, 301);
exit;
2番目の引数は、true だと既に同じヘッダがある場合に置き換える(同じヘッダを生成しない)。
3番目の引数はHTTPレスポンスコードで、この例では301でリダイレクトしている。
代表的な3xx系は、301 Moved Permanently、302 Found、303 See Otherなどがある。
リダイレクトする場合、私は基本的に .htaccess に RewriteRule を書いて処理しているが、どうしてもPHPで処理してからリダイレクトしなければいけないときはheader関数を使っている。
このエントリーをはてなブックマークに追加