답변:
다음과 같이 시도해보십시오 (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;
}
if( $_SERVER['HTTPS'] == "off")
이 코드가 작동 하도록 테스트 해야했습니다. 나는 OP와 같은 Apache가 아니라 IIS에 있기 때문이라고 생각합니다.
이것은 좋은 방법입니다.
<?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();
}
?>
!(isset($_SERVER['HTTPS']) && ($_SERVER['HTTPS'] == 'on'
마지막 부분이 참이면 첫 부분이 거짓이기 때문에 조건 은 항상 거짓입니다.
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")
입니다.
apache
검색 엔진을 통해이 페이지를 볼 수있는 다른 IIS 사용자 (내가 있었던 상황과 유사)를 위해이 답변을 게시했습니다. 나는 답변이 OP뿐만 아니라 커뮤니티 전체의 이익을위한 것이라는 견해에 동의합니다.
당신은 항상 사용할 수 있습니다
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;
}