当我实际通过https访问某个页面时,我遇到$_SERVER['HTTPS']
为空的问题。
根据docs for $_SERVER
,当通过HTTPS访问页面时,这应该是非空的。
此模块提供了大量SSL信息作为SSI和CGI名称空间的附加环境变量。
这是否意味着我需要明确
SetEnv HTTPS on
如果PHP以mod_php的形式运行以获得$_SERVER['HTTPS']
设置,那么在Apache中
我想弄清楚我的系统中是否有问题,或者我是否看到了正常的行为。
答案 0 :(得分:3)
要在.htaccess中正确使用 SetEnv ,您需要mod_env模块,例如:
<IfModule mod_env.c>
SetEnv HTTPS on
</IfModule>
否则, $ _ SERVER [“HTTPS”] 将为空..
答案 1 :(得分: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']
本身:)
答案 2 :(得分:0)
您使用的是Apache 2.x还是1.x?我在PHP docs for $_SERVER上发现了一条评论,说它不会用Apache 1设置。