Я хотел бы использовать 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); } }
Проблема возникает, когда я не вошел в систему, и я пытаюсь получить доступ к своему сайту
Итак, вы знаете другой способ сделать это.
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]
core.php —>
Configure::write('App.baseUrl', env('SCRIPT_NAME'));
Теперь доступ осуществляется через hxxps: //www.mysite.com/index.php/controller/action