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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
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になっていた為の警告でした。プロトコルを
1 |
http:// |
から
1 |
https:// |
に変えてあげるのも良いのですが、上にも書いたようにローカルだとhttp環境の為、どちらでも合わせられるように
1 |
// |
にしました。これでhttps環境だったら勝手にhttps://になりますし、httpだったらhttp://になります。
参考サイト様