我写了一个小函数来建立当前的网站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') === 0 ? 'https://' : 'http://';
...如果你愿意,甚至可以无条件:
$protocol = strtolower(substr($_SERVER["SERVER_PROTOCOL"],0,strpos( $_SERVER["SERVER_PROTOCOL"],'/'))).'://';
查看$_SERVER["SERVER_PROTOCOL"]
这是HTTPS或HTTP的最佳解决方案:
<?php
$protocol = '//';
$site_url = $protocol.$_SERVER["HTTP_HOST"];
?>
但不能显示https或http,所以它只用于链接您的网站内容,如图像等。
如果想在https中重定向你的网站,在.htaccess文件中添加以下代码:
<IfModule mod_rewrite.c>
RewriteCond %{HTTP:CF-Visitor} '"scheme":"http"'
RewriteRule ^(.*)$ https://www.your-domain.com$1 [L]
</IfModule>
将www.your-domain.com改为您的域名。
我知道这是一个老问题,但我今天遇到了这个问题,因为我需要在我的网站上测试这个问题。似乎上面的答案是不必要的复杂。要建立网站协议,你所要做的就是测试$_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://';