3

$_SERVER['HTTPS']当我实际通过 https 访问页面时,我遇到了空的问题。

根据 的文档$_SERVER,通过 HTTPS 访问页面时,这应该是非空的。

为 mod_ssl编写文档

该模块提供了大量 SSL 信息作为 SSI 和 CGI​​ 命名空间的附加环境变量。

这是否意味着我需要明确

SetEnv HTTPS on

在 Apache 中,如果 PHP 作为 mod_php 运行来$_SERVER['HTTPS']设置?

我试图弄清楚我的系统是否有问题,或者我是否看到正常行为。

4

3 回答 3

4

要在 .htaccess 中正确使用SetEnv ,您需要mod_env模块,例如:

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

否则,$_SERVER["HTTPS"]将为空..

于 2012-06-08T15:25:26.773 回答
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']自己:)

于 2012-06-08T15:07:20.060 回答
0

您使用的是 Apache 2.x 还是 1.x?我在$_SERVER的 PHP 文档上找到了一条评论,它说它不会使用 Apache 1 进行设置。

于 2012-06-08T15:08:58.107 回答