[php] PHP를 사용하여 HTTP에서 HTTPS로 리디렉션

저는 쇼핑 카트 웹 사이트에서 작업 중이며 사용자가 결제 세부 정보를 입력 할 때 HTTPS 페이지로 리디렉션하고 로그 아웃 할 때까지 다음 페이지에 대한 HTTPS 연결을 유지하고 싶습니다.

이 작업을 수행하려면 서버에 무엇을 설치해야합니까 (Apache를 사용 중입니다).이 리디렉션을 PHP에서 어떻게 수행 할 수 있습니까?



답변

다음과 같이 시도해보십시오 (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;
}


답변

이것은 좋은 방법입니다.

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


답변

IIS에서 PHP를 사용하여 HTTP에서 HTTPS로 리디렉션

MS 인터넷 정보 서비스 (IIS) 버전 6을 실행하는 Windows 서버에서 작동하도록 HTTPS로 리디렉션하는 데 문제가있었습니다 . 저는 Linux 호스트에서 Apache로 작업하는 데 더 익숙해 져서 인터넷에 도움을 요청했으며 “php redirect http to https”를 검색했을 때 가장 높은 순위의 Stack Overflow 질문 이었습니다. 그러나 선택한 답변이 작동하지 않았습니다.

몇 번의 시행 착오 끝에 IIS에서 비 TLS 연결 용 $_SERVER['HTTPS']으로 설정되어 있음을 발견했습니다 off. 다음 코드가 검색 엔진을 통해이 질문에 오는 다른 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")입니다.


답변

당신은 항상 사용할 수 있습니다

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

저장 URL로 리디렉션합니다.

그러나 .htaccess 및 Apache 재 작성 규칙으로 수행하는 것이 좋습니다.


답변

내 AWS beanstalk 서버에 $ _SERVER [ ‘HTTPS’] 변수가 표시되지 않습니다. ‘http’또는 ‘https’가 될 수있는 $ _SERVER [ ‘HTTP_X_FORWARDED_PROTO’]가 표시되므로 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;
}


답변