【Cakephp2】アクション内のredirect命令で「301リダイレクト」する方法
2018/08/31
CakePHPで作成しているサイトで301リダイレクトが必要になったため .htaccess を書いていたのですが、はたと「CakePHPで簡単に出来るのでは?」と思いリファレンスサイトを見たところ、見事、簡単にできることが判明。
忘備録としてメモ。
なお、CakePHPのバージョンは2.3.10で確認しています。
301リダイレクトについて
とあるページが不要となり、別の特定ページにリダイレクトさせる場合などには『301リダイレクト』を使うのですが、そもそも301リダイレクトとは何かと端的に書くと、301リダイレクトとは「永久移転」を意味し、検索エンジンの評価対象は「移動後のページ」となります。
移動前ページの評価が移動後ページに継承されるのが特徴。
通常は .htaccess ファイルを作成し、「Redirect」や「Mod Rewrite」を使ってリダイレクトさせるのですが、CakePHPでは「$this->redirect」を使って、301などHTTPステータスコードを定義できるようです。
グレイトですな。
CalePHPで301リダイレクト
公式サイトの解説はこちら。
redurect()メソッドの第二引数にはリダイレクトの種類(HTTPステータスコード)を INT で指定することが可能。
301リダイレクトの場合は「301」と書けばOK。302リダイレクトなら「302」ですね。
ということで、サンプル。
http://example.com/users/ にアクセスすると、
絶対パスでは
http://example.com/attention/
相対パスでは
http://example.com/users/thanks
にリダイレクトされます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<?php class UsersController extends AppController { // 絶対パス function list() { $this->redirect('/attention/', 301); } // 相対パス function detail() { $this->redirect('thanks', 301); } } |
リファレンスによると、第三引数に false を指定しない限りはリダイレクト後に exit() を呼び出す、とのことです。知らんかった orz
もちろん以下のように http から始まる URL を指定することも可能。
1 2 3 4 5 6 7 8 |
<?php class UsersController extends AppController { function list() { $this->redirect('http://hoge.com', 301); } } |
301リダイレクトの確認方法
きちんとステータスコード301でリダイレクトしているのかを確認したい時は、FireBugの「ネット」タブを開き、「持続」「すべて」を選択してリダイレクトさせるとステータスなどが表示されます。
「304 Not Modified」というあまり有難くないものも教えてくれるので、たまにチェックしてみるのも良いかもしれませんね。