CakePHP - селективный SSL - PullRequest
       8

CakePHP - селективный SSL

9 голосов
/ 18 ноября 2011

Как заставить HTTPS для определенных частей сайта, например, страницу входа или страницу регистрации и использовать HTTP для остальной части сайта?

Ответы [ 4 ]

1 голос
/ 28 декабря 2011

Мой любимый метод принудительного преобразования в https - это сделать это первым в вашем php-скрипте.Он работает в Joomla и может очень хорошо работать в CakePHP.

if( $_SERVER['SERVER_PORT'] == 80) {           
header('Location:https://'.$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']).'/'.basename($_SERVER['PHP_SELF'])); 
die();
}

Этот фрагмент будет вызывать https на любой странице, которую вы просматриваете.Если вы хотите изолировать определенные страницы, просто поместите некоторые условия на основе информации в переменную «$ _SERVER ['PHP_SELF']».

В противном случае измените файл .htaccess, предполагая, что ваш хост позволяет вам получить доступ кэто:

RewriteEngine On 
RewriteCond %{SERVER_PORT} 80 
RewriteCond %{REQUEST_URI} somefolder 
RewriteRule ^(.*)$ https://www.domain.com/somefolder/$1 [R,L]
0 голосов
/ 18 ноября 2011

Вы можете загрузить компонент RequestHandler и использовать функцию isSsl (), чтобы определить, исходит ли он от http или https, если! IsSsl, затем перенаправить его на страницу https :), в противном случае сделайте все, что захотите.

Информация о книге функции isSsl здесь

0 голосов
/ 02 декабря 2011

Лучшим решением может быть сделать это с mod_rewrite с htaccess для определенных URL-адресов и оставить код из всего этого вместе.

Вы можете настроить правила перезаписи только для определенных URL.

Вот пример того, как это сделать для всего сайта:

http://www.besthostratings.com/articles/force-ssl-htaccess.html

0 голосов
/ 18 ноября 2011

Я сделал то же самое с CodeIgniter.Я не совсем знаком с CakePHP, но уверен, что процесс похож.

  1. Я устанавливаю apache для указания трафика SSL и не-SSL на один и тот же каталог.
  2. Затем я создал в конфигурации массив, в котором перечислены контроллеры, которые должны иметь SSL (зарегистрируйтесь,логин и т. д.)
  3. Затем в помощнике с автозагрузкой была создана функция, которая проверяла, находится ли текущий контроллер в этом массиве, а затем сбрасывает base_url с https:// вместо http://.Если бы контроллер не был в массиве, он заставил бы base_url к http://.

Работал для меня безупречно.Дайте мне знать, если примеры кода из моего проекта CodeIgniter будут полезны.

Подобный пост, который может помочь.

...