CakePHP2.x https対応(全画面でhttpをhttpsにリダイレクトする)をしました。
環境 CakePHP2.10.2 PHP7.1
経緯としては、wifiの脆弱性もあるしユーザ登録・ログインなどがあるサービスの為です。暗号化させて保護された通信をさせないとユーザも安心出来ないですし。
httpからhttpsにリダイレクトするには、通常webサーバ・apacheの設定や.htaccessで良いと思います。ただ、今回はレンタルサーバに乗せているサービスで、かつWordPressのように.htaccessで制御するようにはしておらず(普通はCakePHPでサービス構築する時は.htaccessを使用しないようにすると思います)、アプリ側で制御する必要があったのでCakePHP側で、httpからhttpsへのリダイレクト設定をしました。
対応内容
全ページhttpのアクセスをhttpsへリダイレクトする。
修正ファイル
AppController.php
class AppController extends Controller {
public $components = array(
'Security',
)
);
public function beforeFilter() {
// デバッグ時以外はhttp->httpsにリダイレクト
if (!Configure::read('debug')) {
$this->Security->blackHoleCallback = 'forceSecure';
$this->Security->requireSecure();
}
}
public function forceSecure() {
$this->redirect("https://" . env('SERVER_NAME') . $this->here);
}
}
補足
ローカル・デバッグ環境ではhttps化していない為、デバッグ時を除くようにしました。
参考サイト様を参考にAppController.phpに組み込みました。(↑には今回の対応コードしか書いてませんが、色々カスタマイズしているので抜粋しています。)
これで本番https環境へデプロイしたらうまくいったもののChromeのデベロッパーツールで赤くなっている箇所が。
外部リンクを張っている箇所がhttpになっていた為の警告でした。プロトコルを
http://
から
https://
に変えてあげるのも良いのですが、上にも書いたようにローカルだとhttp環境の為、どちらでも合わせられるように
//
にしました。これでhttps環境だったら勝手にhttps://になりますし、httpだったらhttp://になります。
参考サイト様

