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下,即使定位标记网址使用的是http,服务器也不会自动将网址转换为https吗?是否需要检查协议?


潇湘沐
浏览 742回答 3
3回答

慕娘9325324

这不是自动的。您的最高职能看起来还不错。

萧十郎

我知道已经很晚了,尽管有解决此问题的简便方法!其他解决方案非常混乱。这就是我会做的:$protocol = stripos($_SERVER['SERVER_PROTOCOL'],'https') === 0 ? 'https://' : 'http://';...或者甚至无条件,如果您愿意:$protocol = strtolower(substr($_SERVER["SERVER_PROTOCOL"],0,strpos( $_SERVER["SERVER_PROTOCOL"],'/'))).'://';看一下 $_SERVER["SERVER_PROTOCOL"]

哔哔one

这对我有用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://';}
打开App,查看更多内容
随时随地看视频慕课网APP