为什么_SERVER ["HTTPS"]设置为1?

Som*_*gOn 6 php apache webserver

我的网站有一个SSL证书,我正在点击https://mysite.com/info.php,但是在PHP变量部分下没有报告_SERVER ["HTTPS"].我相信这会导致Drupal站点出现问题,其中一些URL被写入页面,因为https:// ...其他人正在写为http:// ...

是什么决定了_SERVER ["HTTPS"]是否已设置?


编辑:这可能是我的问题的答案在服务器发送回检测HTTPS与HTTP没有任何用处.可能是负载均衡器问题

Som*_*gOn 9

事实证明,由于处理SSL加密/解密的Load Balancer,Web服务器没有获得$ _SERVER ["HTTPS"],但是设置了$ _SERVER ["HTTP_USESSL"]并且可以用作闪存SSL流量.


小智 7

它在文档中说 $_SERVER['HTTPS']

Set to a non-empty value if the script was queried through the HTTPS protocol.
Run Code Online (Sandbox Code Playgroud)

所以

function checkHTTPS() {
    if(!empty($_SERVER['HTTPS']))
        if($_SERVER['HTTPS'] !== 'off')
            return true; //https
        else
            return false; //http
     else
        if($_SERVER['SERVER_PORT'] == 443)
            return true; //https
        else
            return false; //http
}
Run Code Online (Sandbox Code Playgroud)


小智 5

代理/负载均衡器背后

$_SERVER['SERVER_PORT'] 总是 80

$_SERVER["HTTPS"] 和 $_SERVER["HTTP_USESSL"] 为 NULL

我使用了 $_SERVER['HTTP_X_FORWARDED_PROTO'] 返回 http 或 https