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のみ) | カミタニ ブログ
コメント