7

私のサイトにはSSL証明書があり、https://mysite.com/info.phpにアクセスしていますが、PHP変数セクションで_SERVER["HTTPS"]が報告されていません。これが、一部のURLがhttps:// ...としてページに書き込まれ、他のURLがhttp://...として書き込まれているDrupalサイトで問題を引き起こしていると思います。

_SERVER ["HTTPS"]が設定されているかどうかは何によって決まりますか?


編集:これは私の問題に対する答えかもしれません。サーバーでHTTPSとHTTPを検出して、何も役に立たないものを送り返します。ロードバランサーの問題である可能性があります

4

4 に答える 4

10

SSL暗号化/復号化を処理するロードバランサーのため、Webサーバーは$ _SERVER ["HTTPS"]を取得しませんが、$ _ SERVER ["HTTP_USESSL"]が設定され、 SSLトラフィック。

于 2012-07-26T13:07:21.070 に答える
7

ドキュメントに記載されています$_SERVER['HTTPS']

Set to a non-empty value if the script was queried through the HTTPS protocol.

それで

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
}
于 2012-07-25T13:22:32.377 に答える
5

プロキシ/ロードバランサーの背後

$_SERVER['SERVER_PORT']は常に80でした

$_SERVER["HTTPS"]と$_SERVER["HTTP_USESSL"]はNULLでした

httpまたはhttpsを返す$_SERVER['HTTP_X_FORWARDED_PROTO']を使用しました

于 2016-01-08T11:16:03.967 に答える
1

Arnaud Hallaisの投稿に加えて、ローカルホスト(apache / mac)、テストサーバー(apache / linux)、および本番サイト(iis / win)で正しいプロトコルを取得できた唯一の方法は次のとおりです。

define("PROTOCOL", isset($_SERVER['HTTP_X_FORWARDED_PROTO']) ? $_SERVER['HTTP_X_FORWARDED_PROTO'] : ((isset( $_SERVER["HTTPS"] ) && strtolower( $_SERVER["HTTPS"] ) == "on" ) ? 'https' : 'http')); 
于 2017-10-30T23:11:40.753 に答える