<div class="section">
CakePHPのredirect関数ではまったのでメモ。
例えば、以下のようなソースコードがある。
class Test extends AppController { function beforeFilter() { if ($_SERVER['HTTPS'] != 'on') { $this->redirect('https://' . $_SERVER['HTTP_HOST'] . '/test/index'); } } function index() { if ($_SERVER['REMOTE_ADDR'] !== '218.14.253.60') { $this->render('error'); return; } $this->redirect('confirm'); } function confirm() { echo 'This id confirm.'; } }
https://xxx/test/indexにアクセスすると、
https://xxx/test/confirmにリダイレクトして、「This is confirm.」と表示したい。
しかしコレでは上手く動かないみたいで、errorが描画されしまうようだ。
いろいろ試した結果、原因は「$this->redirect('confirm')」が上手くいっていないようだと判明!
(時間がなくてテストコードを書いてないので、憶測でしかないけど・・・)
$this->redirect('confirm')のリダイレクト先が「http://xxx/test/confirm」みたいで、beforeFileterの処理で「https://xxx/test/index」にリダイレクトされてしまう。
コレを避けるために、リダイレクトの部分を以下のように変更しました。
$this->redirect('confirm'); → $this->redirect->('https://' . $_SERVER['HTTP_HOST'] . '/test/confirm');
$this->redirect('https://xxx/test/confirm’);
と指定しなかったのは、ホストが違うサーバ上で同じ処理をしたい時にソースコードを変更しなくてもいいようにするためです。
参考
http://php.tekmemo.net/?p=737