###前提・実現したいこと
Amazon EC2
CakePHP 3.4.9
PHP 7.0.16
jQuery Pjax
CakePHP3でログイン認証機能を利用したい
Ajaxの関係で全てのページでhttpsで利用したい
######ディレクトリ構造
DocumentRoot
├ CAKEPROJECT
│ ├ src
│ ︙
│ ├ webroot
###発生している問題・試したこと
リダイレクト時にhttpsでなくなる
①
php
1 $this->loadComponent('Security', ['blackHoleCallback' => 'forceSSL']); 2 public function forceSSL() 3 { 4 return $this->redirect('https://' . env('SERVER_NAME') . $this->request->here()); 5 }
このコードでサイトのリンク(Auth->allowしていない)をクリックすると、httpsになり、https://DOMAIN/CAKEPROJECT/CONTROLLER/(ログインACTION)になるはずが、https://DOMAIN/(リンク先ACTION)になってしまう。
アクション2のリンククリックでは、http://DOMAIN/CAKEPROJECT/CONTROLLER/(ログインACTION)にリダイレクトされるが、httpsにならない
異なるアクションリンクで挙動が異なる。(どちらのアクションもAuth->allowは設定していないし、DBを利用している)
$this->loadComponent('Auth',[ 'authorize' => 'Controller', 'authenticate' => [ 'Form' => [ 'fields' => [ 'username' => 'email', 'password' => 'password' ] ] ], 'loginAction' => [ 'controller' => 'CONTROLLER', 'action' => 'login' ], 'loginRedirect' => [ 'controller' => 'CONTROLLER', 'action' => 'index' ], 'logoutRedirect' => [ 'controller' => 'CONTROLLER', 'action' => 'login', ] ]);
ログイン後リダイレクトするはずがリダイレクトされない
Ajaxが404エラーになる
などと行った不具合が多発します。
①のコードを利用していない場合、ログイン後のリダイレクトでhttpになってしまう。
ログイン後、URLをhttpsに修正した後は正常に動作します。
.htaccessの設定もやってみましたが、やはりhttps://DOMAIN/(リンク先ACTION)になってしまいます。
常にSSL(https)接続する方法
httpからhttpsに.htaccessを使ってリダイレクトさせる方法
AWSで構築されたサイトをSSL化しようとしたらリダイレクトループではまった
などではリダイレクトループなど同様の現象になってしまい解決できませんでした。
Pjaxとの相性なのか、リダイレクト時にhttpsにならないので、これの解決方法をご教示くださると幸いでございます。
よろしくお願いいたします。
###追記依頼情報
・キャッシュを削除しても動作は変わりませんでした。
・リンクは<a href="<?= $this->Url->build(['action'=>'ACTION']); ?>"></a>
の形で書いています
・ルーティングはよくわからないのですが、少なくともCakePHP3のRouterは使用していません。
DocumentRootはCakePHP3プロジェクトの一つ上のフォルダです。
.htaccessはこのようになっています。
プロジェクト配下
<IfModule mod_rewrite.c> RewriteEngine on RewriteRule ^$ webroot/ [L] RewriteRule (.*) webroot/$1 [L] </IfModule>
webroot配下
<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [L] </IfModule>
回答2件
あなたの回答
tips
プレビュー