[php] 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() );

SSL에서 앵커 태그 URL이 http를 사용하더라도 서버가 자동으로 URL을 https로 변환하지 않습니까? 프로토콜을 확인해야합니까?

감사합니다!



답변

자동이 아닙니다. 당신의 최고 기능은 좋아 보인다.


답변

이런 종류의 문제를 해결하는 훨씬 편리한 방법이 있지만 늦었습니다. 다른 솔루션은 매우 지저분합니다. 이것이 내가하는 방법입니다.

$protocol = stripos($_SERVER['SERVER_PROTOCOL'],'https') === 0 ? 'https://' : 'http://';

… 또는 원하는 경우 조건없이 :

$protocol = strtolower(substr($_SERVER["SERVER_PROTOCOL"],0,strpos( $_SERVER["SERVER_PROTOCOL"],'/'))).'://';

보세요 $_SERVER["SERVER_PROTOCOL"]


답변

이것은 나를 위해 작동

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://';
}


답변

일부 변경 사항 :

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


답변

짧은 길

$scheme = $_SERVER['REQUEST_SCHEME'] . '://';


답변

나에 따르면 포트 번호 테스트는 좋은 습관이 아니기 때문에 내 솔루션은 다음과 같습니다.

define('HTTPS', isset($_SERVER['HTTPS']) && filter_var($_SERVER['HTTPS'], FILTER_VALIDATE_BOOLEAN));

HTTPS불변는 TRUE경우 $_SERVER['HTTPS']설정 또는 “예” “에”, “1”을 “true”로 동일합니다. 그렇지 않으면 FALSE를 반환합니다.


답변

IIS를 제외한 모든 시스템의 경우 사이트 자체 URL을 정의하기에 충분합니다.

$siteURL='http'.(empty($_SERVER['HTTPS'])?'':'s').'://'.$_SERVER['HTTP_HOST'].'/';

또는

$siteURL='http'.(empty($_SERVER['HTTPS'])?'':'s').'://'.$_SERVER['SERVER_NAME'].'/';

정확히 원하는 것에 따라 달라집니다 :
HTTP_HOST vs. SERVER_NAME