我写了一个小函数来建立当前的网站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吗?有必要检查一下协议吗?
谢谢你!
我知道这是一个老问题,但我今天遇到了这个问题,因为我需要在我的网站上测试这个问题。似乎上面的答案是不必要的复杂。要建立网站协议,你所要做的就是测试$_SERVER['HTTPS']
如果协议使用HTTPS,那么$_SERVER['HTTPS']将返回'on'。如果不是,变量将保持为空。
例如:
测试是否正在使用HTTPS。如果是,回声就会返回
“SSL_test:美元”。如果不是HTTPS, '$SSL_test'将保持为空。
$SSL_test = $_SERVER['HTTPS'];
echo '<p>$SSL_test: '.$SSL_test.'</p>';
if($SSL_test == true) {
echo 'You\'re using SSL';
} else {
echo 'You\'re not using SSL';
}
您可以使用上面的方法轻松、清晰地测试HTTPS并相应地实现。:)
这也是一个迟到的派对,但这里是一个更短的版本的Rid Iculous的答案使用空联合运算符:
$is_ssl = in_array($_SERVER['HTTPS'] ?? '', ['on', 1]) ||
($_SERVER['HTTP_X_FORWARDED_PROTO'] ?? '') == 'https';
$protocol = $is_ssl ? 'https://' : 'http://';
Or:
$protocol = in_array($_SERVER['HTTPS'] ?? '', ['on', 1]) ||
($_SERVER['HTTP_X_FORWARDED_PROTO'] ?? '') == 'https' ?
'https://' : 'http://';
我知道这是一个老问题,但我今天遇到了这个问题,因为我需要在我的网站上测试这个问题。似乎上面的答案是不必要的复杂。要建立网站协议,你所要做的就是测试$_SERVER['HTTPS']
如果协议使用HTTPS,那么$_SERVER['HTTPS']将返回'on'。如果不是,变量将保持为空。
例如:
测试是否正在使用HTTPS。如果是,回声就会返回
“SSL_test:美元”。如果不是HTTPS, '$SSL_test'将保持为空。
$SSL_test = $_SERVER['HTTPS'];
echo '<p>$SSL_test: '.$SSL_test.'</p>';
if($SSL_test == true) {
echo 'You\'re using SSL';
} else {
echo 'You\'re not using SSL';
}
您可以使用上面的方法轻松、清晰地测试HTTPS并相应地实现。:)