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

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

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

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

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

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

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

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

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

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

Перенаправление с 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") .