Перенаправление с HTTP на HTTPS с помощью PHP


Я работаю на веб-сайте корзины покупок, и я хотел бы перенаправить пользователя на страницу HTTPS, когда он вводит свои платежные данные и поддерживает соединение HTTPS для следующих страниц, пока он не выйдет из системы.

Что мне нужно установить на сервере (я использую Apache) для того, чтобы сделать это, и как это перенаправление может быть сделано с PHP?

4 78

4 ответа:

попробуйте что-то вроде этого (должно работать для Apache и 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();
}

Это хороший способ сделать это:

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

вы всегда можете использовать

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

для перенаправления на URL-адрес сохранения.

но я бы рекомендовал сделать это .htaccess и правила перезаписи Apache.

перенаправление с HTTP на HTTPS с PHP на IIS

у меня возникли проблемы с перенаправлением на HTTPS для работы на сервере Windows который работает версия 6 MS Internet Information Services (IIS). Я больше раньше я работал с Apache на хосте Linux, поэтому я обратился к Интернету для помощь и это был самый высокий рейтинг переполнения стека вопрос, когда я искал ибо "php redirect http to https". Однако выбранный ответ не сработал для мне.

после некоторых проб и ошибок, я обнаружил, что с IIS, $_SERVER['HTTPS'] is установите значение off для подключений, отличных от TLS. Я думал, что следующий код должен помогите любым другим пользователям IIS, которые приходят к этому вопросу через поисковую систему.

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

Edit: С другой ответ переполнения стека, более простое решение-проверить if($_SERVER["HTTPS"] != "on").