我已经写了一个小函数来建立当前的站点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吗?是否需要检查协议?
谢谢!
发布于 2010-12-22 03:38:31
它不是自动的。你的top函数看起来没问题。
发布于 2013-02-27 07:21:24
我知道现在已经很晚了,尽管有一个更方便的方法来解决这类问题!其他的解决方案相当混乱;我是这样做的:
$protocol = stripos($_SERVER['SERVER_PROTOCOL'],'https') === 0 ? 'https://' : 'http://';
...or即使没有条件,如果你喜欢的话:
$protocol = strtolower(substr($_SERVER["SERVER_PROTOCOL"],0,strpos( $_SERVER["SERVER_PROTOCOL"],'/'))).'://';
看看
发布于 2013-01-11 09:17:39
这对我很管用
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://';
}
https://stackoverflow.com/questions/4503135
复制相似问题