CakePHP

【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

にリダイレクトされます。

リファレンスによると、第三引数に false を指定しない限りはリダイレクト後に exit() を呼び出す、とのことです。知らんかった orz

もちろん以下のように http から始まる URL を指定することも可能。

301リダイレクトの確認方法

きちんとステータスコード301でリダイレクトしているのかを確認したい時は、FireBugの「ネット」タブを開き、「持続」「すべて」を選択してリダイレクトさせるとステータスなどが表示されます。

「304 Not Modified」というあまり有難くないものも教えてくれるので、たまにチェックしてみるのも良いかもしれませんね。

firebug

-CakePHP
-,