Лучшая оценка для SSL в CakePHP

Я хотел бы использовать HTTPS для всех страниц.

Я использую CakePHP 2.3 с компонентом «Auth».

Фактически единственным способом, который я нашел, является добавление «beforeFilter-condition».

Но это очень грязно, потому что у меня много запросов «не-SSL» из-за Auth-Component.

AppController.php —>

class AppController extends Controller { public function beforeFilter() { if (env("SERVER_PORT") != "443") { $this->Security->blackHoleCallback = 'forceSSL'; $this->Security->requireSecure(); } } public function forceSSL() { $this->redirect('https://' . env('SERVER_NAME') . $this->here); } } 

Проблема возникает, когда я не вошел в систему, и я пытаюсь получить доступ к своему сайту

  • Запрос -> Ответ (из-за)
  • GET hxxp: // MYSITE / -> 302 hxxp s : // MYSITE / (beforeFilter-redirection)
  • GET hxxp s : // MYSITE / -> 302 hxxp: // MYSITE / users / login (компонент Auth)
  • GET hxxp: // MYSITE / users / login -> 302 hxxp s : // MYSITE / users / login (beforeFilter-redirection)
  • GET hxxp s : // MYSITE / users / login -> 200
  • POST hxxp s : // MYSITE / users / login (с кредитами) -> 302 hxxp: // MYSITE / (компонент Auth)
  • GET hxxp: // MYSITE / -> 302 hxxp s : // MYSITE /
  • GET hxxp s : // MYSITE / -> 200

Итак, вы знаете другой способ сделать это.

NB: Мне пришлось принудительно защитить свой файл cookie в core.php, потому что это не так.

core.php —>

 Configure::write('Session', array( 'defaults' => 'php', 'ini' => array( 'session.cookie_secure' => true ))); 

Обратите внимание, что я также попытался заставить SSL, изменив .htaccess, но все, что я получаю, – это бесконечный цикл.

РЕДАКТИРОВАТЬ :

По умолчанию .htaccess в CakePHP

 <IfModule mod_rewrite.c> RewriteEngine on RewriteRule ^$ app/webroot/ [L] RewriteRule (.*) app/webroot/$1 [L] </IfModule> 

Я попытался добавить:

 RewriteCond %{SERVER_PORT} 80 RewriteRule ^(.*)$ https://www.example.com/$1 [R,L] 

Наконец, решение, которое я выбрал, было:

  • Удаление /app/webroot/.htaccess и /app/.htaccess

  • Изменение /.htaccess для

.htaccess —>

 RewriteEngine on RewriteCond %{SERVER_PORT} !^443$ RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R,L] 
  • Отключение URL-перезаписи в торте

core.php —>

 Configure::write('App.baseUrl', env('SCRIPT_NAME')); 

Теперь доступ осуществляется через hxxps: //www.mysite.com/index.php/controller/action