2012-06-08 73 views
1

我在通過https實際訪問頁面時遇到$_SERVER['HTTPS']爲空的問題。

根據docs for $_SERVER,當通過HTTPS訪問頁面時,這應該是非空的。

Accoding的docs for mod_ssl

該模塊提供了大量的SSL信息作爲附加環境變量的SSI和CGI的命名空間。

這是否意味着我需要明確

SetEnv HTTPS on 

在Apache中,如果PHP運行,而mod_php得到$_SERVER['HTTPS']集?

我想弄清楚我的系統中是否有問題,或者我看到了正常的行爲。

回答

3

設置爲正確使用SETENV在你的.htaccess你需要的​​模塊,如評論:

<IfModule mod_env.c> 
    SetEnv HTTPS on 
</IfModule> 

否則, $ _SERVER [「HTTPS」]將被清空..

1

我相信SetEnv不能用於PHP模塊;你有沒有使用mod_userdir?這可能會產生影響。

或者,你可以使用這種檢測:

if (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' 
    || $_SERVER['SERVER_PORT'] == 443) { 

    $secure_connection = true; 
} 

順便說一句,這也可能會發生,如果你的網站是負載均衡和均衡的常規HTTP連接內部運行。

更新

我不知道是否mod_userdir總是有這樣的效果,即使在不使用。

至於例子,而不是值分配給$secure_connection你可以(確保沒有人看)寫爲$_SERVER['HTTPS']本身:)

+0

沒有負載平衡器。 mod_userdir被編譯進來,但沒有被使用。 SetEnv的作品;我主要試圖弄清楚這是否是正常行爲,或者如果我有一個實際問題。不幸的是,你的例子不適用於我,因爲有第三方代碼正在檢查$ _SERVER ['HTTPS'] – mpdonadio

+0

@MPD無法多說關於mod_userdir是如何影響它的,但是我添加了一個方法仍然使用我發佈的示例代碼:) –