2011-02-24 23 views
70

Estoy trabajando en un sitio web de carrito de compras y me gustaría redirigir al usuario a una página HTTPS cuando ingresa sus detalles de facturación y mantiene la conexión HTTPS para las siguientes páginas hasta que cierra la sesión .Redireccionando de HTTP a HTTPS con PHP

¿Qué necesito instalar en el servidor (estoy usando Apache) para hacer esto, y cómo se puede hacer esta redirección desde PHP?

Respuesta

166

Pruebe algo como esto (debería funcionar para Apache e IIS):

if(empty($_SERVER['HTTPS']) || $_SERVER['HTTPS'] == "off"){ 
    $redirect = 'https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; 
    header('HTTP/1.1 301 Moved Permanently'); 
    header('Location: ' . $redirect); 
    exit(); 
} 
+3

No funciona siempre. Intenté usarlo y no había ningún elemento 'https' en la matriz $ _SERVER debido a que daba error de 'demasiados redireccionamientos'. Tendría que usar otro método. –

+0

Edito la pregunta en unos minutos, quizás esto funcione para usted –

+5

Tuve que probar 'if ($ _SERVER ['HTTPS'] ==" off ")' para que este código funcione. Creo que es porque estoy en IIS, no Apache como el OP. –

5

Siempre se puede usar

header('Location: https://www.domain.com/cart_save/'); 

para redirigir a la URL en Guardar.

Pero yo recomendaría hacerlo por .htaccess y las reglas de reescritura de Apache.

+11

yo siempre lo recomendaría para comprobar $ _SERVER [ 'HTTPS'] antes de redirigir. –

+0

$ _SERVER ['HTTPS'] no siempre está configurado, pero es una buena idea verificarlo antes. Es por eso que recomiendo hacerlo con una regla de reescritura útil en Apache, que solo redirige cuando no está en HTTPS. – powtac

+0

Aunque Apache recomienda no usar un archivo .htaccess adicional (porque se ralentiza), pero para usar las reglas de reescritura dentro del * .conf de Apache. – powtac

3

Redireccionamiento de HTTP a HTTPS con PHP en IIS

que estaba teniendo problemas para conseguir la redirección de HTTPS para trabajar en un equipo Windows servidor que ejecuta la versión 6 de MS Internet Information Services (IIS). Estoy más acostumbrado a trabajar con Apache en un servidor Linux, así que se dirigió a la Internet para ayuda y este fue el más alto rango cuestión de desbordamiento de pila cuando busqué para “php redirección HTTP a HTTPS”. Sin embargo, la respuesta seleccionada no funcionó para mí.

Después de algún ensayo y error, he descubierto que con IIS, $_SERVER['HTTPS'] es conjunto de off para las conexiones no TLS. Pensé que el siguiente código debería ayudar a cualquier otro usuario de IIS que llegue a esta pregunta a través del motor de búsqueda.

<?php 
if (! isset($_SERVER['HTTPS']) or $_SERVER['HTTPS'] == 'off') { 
    $redirect_url = "https://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; 
    header("Location: $redirect_url"); 
    exit(); 
} 
?> 

Edición: Desde otra Stack Overflow answer, una solución más simple es comprobar if($_SERVER["HTTPS"] != "on").

+0

bien ... pero dijo que estaba usando apache –

+6

@JakeSylvestre. Dado que esta pregunta no está etiquetada como 'apache', publiqué esta respuesta para beneficio de otros usuarios de IIS (similar a la situación en la que me encontraba) que puede encontrar esta página a través del motor de búsqueda. Me suscribo a la opinión de que las respuestas son para el beneficio de la comunidad como un todo y no solo del PO. –

5

Ésta es una buena manera de hacerlo:

<?php 
if (!(isset($_SERVER['HTTPS']) && ($_SERVER['HTTPS'] == 'on' || 
    $_SERVER['HTTPS'] == 1) || 
    isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && 
    $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')) 
{ 
    $redirect = 'https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; 
    header('HTTP/1.1 301 Moved Permanently'); 
    header('Location: ' . $redirect); 
    exit(); 
} 
?> 
+1

funciona bien, el marcado como bueno devolverá una redirección demasiadas veces al menos en Chrome –