PHP获取网站URL协议

我写了一个小函数来建立当前的网站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') === true ? '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://';
}
链接地址: http://www.djcxy.com/p/41129.html

上一篇: PHP Get Site URL Protocol

下一篇: HTTP Basic Authentication credentials passed in URL and encryption