2012-06-08 45 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是如何影响它的,但是我添加了一个方法仍然使用我发布的示例代码:) –