我编写了一个小函数来建立当前的站点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吗?是否需要检查协议?
3 回答
![?](http://img1.sycdn.imooc.com/54584f6d0001759002200220-100-100.jpg)
萧十郎
TA贡献1815条经验 获得超13个赞
我知道已经很晚了,尽管有解决此问题的简便方法!其他解决方案非常混乱。这就是我会做的:
$protocol = stripos($_SERVER['SERVER_PROTOCOL'],'https') === 0 ? 'https://' : 'http://';
...或者甚至无条件,如果您愿意:
$protocol = strtolower(substr($_SERVER["SERVER_PROTOCOL"],0,strpos( $_SERVER["SERVER_PROTOCOL"],'/'))).'://';
看一下 $_SERVER["SERVER_PROTOCOL"]
![?](http://img1.sycdn.imooc.com/54585094000184e602200220-100-100.jpg)
哔哔one
TA贡献1854条经验 获得超8个赞
这对我有用
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://';
}
- 3 回答
- 0 关注
- 768 浏览
添加回答
举报
0/150
提交
取消