2011-11-18 19 views
8

¿Cómo fuerzo HTTPS para ciertas partes de un sitio, p. una página de inicio de sesión o página de registro, y usar HTTP para el resto del sitio?CakePHP - Selective SSL

+0

posible duplicado de [permitiendo selectivamente SSL para ciertas acciones en CakePHP] (http://stackoverflow.com/questions/751338/selectively-enabling-ssl-for-certain-actions-in-cakephp) – sarnold

Respuesta

0

Hice exactamente lo mismo con CodeIgniter. No estoy totalmente familiarizado con CakePHP, pero estoy seguro de que el proceso es similar.

  1. Configuré apache para señalar el tráfico SSL y no SSL al mismo directorio.
  2. Entonces creó una matriz en la configuración que enumeran los cuales los controladores necesarios para tener SSL (registro, login, etc.)
  3. creó entonces una función en un ayudante autocargado que comprueba para ver si el controlador de corriente estaba en esa matriz y luego restablecería el base_url con https:// en lugar de http://. Si el controlador no estaba en la matriz, forzaría base_url a http://.

Funcionó impecablemente para mí. Avíseme si los ejemplos de código de mi proyecto CodeIgniter serían útiles.

Similar post that may help.

0

Es posible cargar el componente RequestHandler y utilizar la función isSsl() para determinar si proviene de un servidor HTTP o HTTPS, si! IsSsl luego redirigirlo a una página https :) demás hacer lo otro lo que quieres

información sobre el libro de la función isSsl here

0

Una mejor solución podría estar haciendo esto con mod_rewrite con .htaccess con certeza la URL de salida y el código de todo junto.

Puede configurar sus reglas de reescritura solo para ciertas Url.

Aquí es una pista sobre cómo hacerlo para un sitio completo:

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

1

Mi favorito convertir a https método de forzar es poner esto como la primera cosa en su script php. Funciona en Joomla, y bien puede funcionar en CakePHP.

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

Este fragmento forzará https en cualquier página que esté viendo. Si desea aislar páginas de certian, simplemente ponga algunas condiciones basadas en la información en la variable "$ _SERVER ['PHP_SELF']".

De lo contrario, modificar el archivo .htaccess, asumiendo que su anfitrión le permite tener acceso a esto:

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