Перенаправление с HTTP на HTTPS с помощью PHP
Я работаю над веб-сайтом корзины покупок, и я хотел бы перенаправить пользователя на страницу HTTPS, когда он вводит свои платежные данные и поддерживает соединение HTTPS для следующих страниц, пока он не выйдет из системы.
Что мне нужно для установки на сервере (я использую Apache) для этого и как это перенаправление можно выполнить с PHP?
Ответы
Ответ 1
Попробуйте что-то вроде этого (должно работать для 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;
}
Ответ 2
Это хороший способ сделать это:
<?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();
}
?>
Ответ 3
Вы всегда можете использовать
header('Location: https://www.domain.com/cart_save/');
для перенаправления на URL сохранения.
Но я бы рекомендовал сделать это с помощью .htaccess и правил перезаписи Apache.
Ответ 4
Перенаправление с 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();
}
?>
Изменить: из другого ответа на переполнение стека,
более простым решением является проверка if($_SERVER["HTTPS"] != "on")
.
Ответ 5
На моем сервере 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;
}