web-dev-qa-db-fra.com

Redirection de HTTP vers HTTPS avec PHP

Je travaille sur un site Web de panier d'achat et je voudrais rediriger l'utilisateur vers une page HTTPS lorsqu'il saisira ses informations de facturation et conserver la connexion HTTPS pour les pages suivantes jusqu'à ce qu'il se déconnecte.

Qu'est-ce que je dois installer sur le serveur (j'utilise Apache) pour faire cela, et comment cette redirection peut-elle être effectuée à partir de PHP?

90
Psyche

Essayez quelque chose comme ceci (devrait fonctionner pour Apache et IIS):

if (empty($_SERVER['HTTPS']) || $_SERVER['HTTPS'] === "off") {
    $location = 'https://' . $_SERVER['HTTP_Host'] . $_SERVER['REQUEST_URI'];
    header('HTTP/1.1 301 Moved Permanently');
    header('Location: ' . $location);
    exit;
}
217
Raphael Michel

C'est un bon moyen de le faire:

<?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();
}
?>
14
Matiasg1982

Vous pouvez toujours utiliser

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

pour rediriger vers l'URL de sauvegarde.

Mais je recommanderais de le faire par .htaccess et les règles de réécriture d’Apache.

5
powtac

Redirection de HTTP vers HTTPS avec PHP sur IIS

J'avais du mal à faire en sorte que la redirection vers HTTPS fonctionne sur un serveur Windows qui exécute la version 6 de MS Internet Information Services (IIS) . Je suis plus habitué à travailler avec Apache sur un hôte Linux. Je me suis donc tourné vers Internet pour trouver de l'aide. C'était la question de débordement de pile la plus importante lorsque j'ai recherché "redirection http vers https" . Cependant, la réponse choisie ne fonctionnait pas pour moi.

Après quelques essais et erreurs, j'ai découvert qu'avec IIS, $_SERVER['HTTPS'] Était réglé sur off pour les connexions non-TLS. . Je pensais que le code suivant devrait aider tous les autres IIS utilisateurs qui viennent à cette question via le moteur de recherche.

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

Edit: D'un autre réponse de débordement de pile , une solution plus simple consiste à vérifier if($_SERVER["HTTPS"] != "on").

5
Anthony Geoghegan

Sur mon serveur AWS beanstalk, je ne vois pas la variable $ _SERVER ['HTTPS']. Je vois bien $ _SERVER ['HTTP_X_FORWARDED_PROTO'] qui peut être 'http' ou 'https'. Si vous hébergez sur AWS, utilisez ceci:

if ($_SERVER['HTTP_Host'] != 'localhost' and $_SERVER['HTTP_X_FORWARDED_PROTO'] != "https") {
    $location = 'https://' . $_SERVER['HTTP_Host'] . $_SERVER['REQUEST_URI'];
    header('HTTP/1.1 301 Moved Permanently');
    header('Location: ' . $location);
    exit;
}
0
phoenix