Перенаправление с HTTP на HTTPS с PHP - PullRequest
88 голосов
/ 24 февраля 2011

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

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

Ответы [ 5 ]

213 голосов
/ 24 февраля 2011

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

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

<?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();
}
?>
5 голосов
/ 27 ноября 2014

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

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

После некоторых проб и ошибок я обнаружил, что в IIS для $_SERVER['HTTPS'] установлено значение 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();
}
?>

Редактировать : из другого ответа переполнения стека , aболее простым решением является проверка if($_SERVER["HTTPS"] != "on").

5 голосов
/ 24 февраля 2011

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

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

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

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

0 голосов
/ 17 апреля 2019

На моем сервере AWS beanstalk я не вижу переменную $ _SERVER ['HTTPS']. Я вижу $ _SERVER ['HTTP_X_FORWARDED_PROTO'], который может быть либо «http», либо «https», поэтому, если вы размещаете на AWS, используйте это:

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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...