我写了一个小函数来建立当前的网站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吗?有必要检查一下协议吗?
谢谢你!
这是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改为您的域名。
我知道已经很晚了,虽然有一个更方便的方法来解决这种问题!其他的解决方案相当混乱;我是这样做的:
$protocol = stripos($_SERVER['SERVER_PROTOCOL'],'https') === 0 ? 'https://' : 'http://';
...如果你愿意,甚至可以无条件:
$protocol = strtolower(substr($_SERVER["SERVER_PROTOCOL"],0,strpos( $_SERVER["SERVER_PROTOCOL"],'/'))).'://';
查看$_SERVER["SERVER_PROTOCOL"]