redirectの仕様

2007/08/07 | cakePHP

以前「redirectメソッドは使えない」という趣旨の投稿をしたが、故あってソースを読んでみた。別に「使えない」ということはなさそう・・・。
まず「別ホストへのリダイレクト」。これはhttpから始まるURL(URI)を引数で与えることで、問題なくリダイレクトできる。
問題は「同じホスト内でのリダイレクト」の中にある。例えば一つのホスト内で以下のような構成で使うような場合だ。

(1) public_html–cake(cakePHPはこちらのディレクトリの中で動作させる)
(2) public_html–misc(cakePHP関連以外のページはこちらに配置)

(1)へのアクセスはhttp://example.com/cake/。
(2)へのアクセスはhttp://example.com/misc/。

となる。ここでredirectの引数に「/cont/func」等と与える。そうするとこれは(1)のURL配下でリダイレクトされる。つまり以下のURLだ。
http://example.com/cake/cont/func

httpから始まらない(正確に言うと引数の中に「://」がない)ときはcakePHP配下でリダイレクトされるということだ。
よって(2)のようにcakePHPの配下でないページに遷移しようとする場合は、たとえ同一ホストであってもhttpから始まる正しいURLを引数として与えないといけない。

これで少しすっきりした。でも結局はphpのheader関数を使ってリダイレクトするわけだから関数の最後はexitして欲しい。exitしないのには何か理由があるのだろうか。

余談だが、このredirect関数。第2引数にhttpのレスポンスコードを入れると、リダイレクトではなく、レスポンスコードとメッセージを返してくれるようだ。ウェブアプリを作りこむ場合は、いろいろ作りこむので純粋にレスポンスコードを返すこともないとは思うのだが・・・。307とか返すときに使うのかなぁ。

コメントを残す


守谷市(まちの情報ポータル) 無料アンケートレンタルjpForm.net