FuelPHP1.7でリダイレクト(Redirect)[FuelPHP入門]

Webサービスある程度できてドメインとったけどまだ公開できない・・・
データ足りないし、デザインやばいし、セキュリティ確認できてないしで、ぶっちゃけ怖い。

3月末までには、自分で納得いくものを作り上げる。
として、今の状態で公開してもいいのだろうか・・・

とりあえず。
今回は、FuelPHPでのリダイレクト処理。

リダイレクトをする理由には色々あるけど、今回僕がする理由は横着なもの。
データがないページを表示しようとしたら、強制的にトップページへリダイレクトする。

1.FuelPHPでのリダイレクト

今回はサイト内のページ移動にリダイレクト処理を行なっている。

リダイレクトを行なう目的には、サイト移転などで「旧URL -> 新URL」することが一般的かな。
というか、昔 FuelPHP で mod_rewrite が有効ではなかったためハマってた時期があったな・・・

FuelPHPにおいては、リダイレクト用のメソッドが用意されてるので、それを使えばいい。
公式ドキュメントより。

// URL を使う
Response::redirect('http://example.com/home', 'refresh');
// 相対 URI を使うこともできる
Response::redirect('site/about');

このソースをコピーして、URLの部分を変更しただけで使える(FuelPHP1.7)。

ただし!
このままでは InternetExploer でエラーが出てしまうらしい

2.refreshとlocationとステータスコード

リンク先は FuelPHP1.3 だったので、FuelPHP1.7では改善されてるかもーとか考えてやってみたけどエラー。
・・・ちゃんと理解しよう。

再び公式より、redirectメソッドの公式。
実はredirectメソッドでは第3引数まで指定できる(上のソースだと第2引数までしか書かれてない)。

redirect($url = ”, $method = ‘location’, $redirect_code = 302)

IEでは、第2引数に ‘refresh’ を使う場合、第3引数に「200」を指定しないとエラーになる。

だから実際のソースはこう書こう。

Response::redirect('http://example.com/home', 'refresh', 200);

以下解説。

第3引数に指定するものは、ステータスコードである。
指定しないとデフォルトでは「302」が入る。

一般的に、リダイレクト(HTTPリダイレクト)処理のステータスコードには301と302の2つある。
IT用語辞典より引用すると。

ステータスコード301と302がHTTPリダイレクト用のコードで、「301 Moved Permanently」はページが完全に引っ越したこと、「302 Moved Temporarily(HTTP 1.1では307に変更)」はページが一時的に別の場所に用意されていることを意味する。

これ読むと「302」で問題ないような気がするが・・・
ちなみに「200」は OK って意味。

ちなみに第2引数も頭空っぽでそのまま使ったけど、ここではリダイレクトの方法を指定する。

locationヘッダを送信するか、refreshヘッダを送信するか決めるらしい。

‘location’ はリファラがある。履歴はそのまま
‘refresh’ はリファラが空になる。つまり、履歴が消える。

デフォルトでは ‘location’が設定されている。

参考

Response – クラス – FuelPHP ドキュメント

FuelPHPでResponse::redirectをする時にハマった’refresh’の挙動(IEのみ) | カミタニ ブログ

コメント

タイトルとURLをコピーしました