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?
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;
}
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();
}
?>
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.
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")
.
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;
}