>  기사  >  백엔드 개발  >  PHP에서 현재 사이트 URL 프로토콜을 확인하는 방법: 이 기능이 정확합니까?

PHP에서 현재 사이트 URL 프로토콜을 확인하는 방법: 이 기능이 정확합니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-10-27 16:58:02776검색

 How to Determine the Current Site URL Protocol in PHP: Is this Function Correct?

PHP 사이트 URL 프로토콜 가져오기 - http 대 https

질문:

사용자가 현재 사이트 URL 프로토콜이지만 SSL이 없기 때문에 HTTPS에서 작동하는지 확실하지 않습니다. 그들은 자신의 기능이 올바른지 묻습니다.

function siteURL()
{
    $protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
    $domainName = $_SERVER['HTTP_HOST'].'/';
    return $protocol.$domainName;
}
define( 'SITE_URL', siteURL() );

또한 다음과 같이 기능을 단순화할 수 있는지 궁금해합니다.

function siteURL()
{
    $protocol = 'http://';
    $domainName = $_SERVER['HTTP_HOST'].'/'
    return $protocol.$domainName;
}
define( 'SITE_URL', siteURL() );

답변:

제공된 함수는 올바르며 다음 조건에 따라 프로토콜(http 또는 https)을 효과적으로 결정할 수 있습니다.

  • $_SERVER['HTTPS']가 비어 있지 않고 'off'와 같지 않은 경우 '
  • $_SERVER['SERVER_PORT']가 443인 경우

그러나 동일한 결과를 얻는 더 간결한 방법은 다음과 같습니다.

if (isset($_SERVER['HTTPS']) &&
    ($_SERVER['HTTPS'] == 'on' || $_SERVER['HTTPS'] == 1) ||
    isset($_SERVER['HTTP_X_FORWARDED_PROTO']) &&
    $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') {
  $protocol = 'https://';
}
else {
  $protocol = 'http://';
}

이 코드 조각은 $_SERVER['HTTPS']의 존재 여부와 해당 값이 'on' 또는 1인지 확인합니다. 또한 $_SERVER['HTTP_X_FORWARDED_PROTO']의 존재 여부와 해당 값이 'https'인지 확인합니다. '. 이 시나리오는 웹사이트에서 HTTPS를 사용하지만 $_SERVER['HTTPS']를 통해 프로토콜에 직접 액세스할 수 없는 경우에 발생합니다.

위 내용은 PHP에서 현재 사이트 URL 프로토콜을 확인하는 방법: 이 기능이 정확합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.