Php.ini显示服务器HTTPS协议


php.ini show server https protocol

我想检测用户是通过http还是https进行导航在网站的某些区域切换到HTTPS。问题是我的服务器没有显示$_SERVER['HTTPS'],所以我想我会的必须配置php.ini来显示它

我似乎弄不清楚,在php上改变什么值Ini显示

谢谢。

编辑:我不是试图找到一种替代方法来检测https的使用。我问我如何编辑php.ini,使$_SERVER['HTTPS']将显示当我访问https://

时的值

编辑2:也许是不够清楚。$_SERVER['HTTPS'] 根本不存在

更新/答案:感谢@Sheriff,我把

fastcgi_param   HTTPS               on;
fastcgi_param   HTTP_SCHEME         https;

在我的虚拟主机文件的这个块中位置~ .php$ {}

现在$_SERVER显示

[HTTPS] => on
[HTTP_SCHEME] => https

先前它没有工作,因为我把fastcgi参数值在服务器块中。愚蠢的我。

$_SERVER['HTTPS']没有php.ini配置。此键被设置为非空只有在通过HTTPS发出请求时才。含义:if (!empty(filter_var($_SERVER['HTTPS'], FILTER_VALIDATE_BOOLEAN))) { /* request was made over https */ }

详情请参阅手册…

"HTTPS"

如果是通过HTTPS协议查询,该值为非空值。

注意:

请注意,在IIS中使用ISAPI时,如果不是通过HTTPS协议发出请求,则该值将为off

当该值为"0""false""off""no"""NULL时,

filter_varFILTER_VALIDATE_BOOLEAN将返回一个布尔值false

Keep In mind

同样重要的是要记住,PHP只从它通过SAPI (服务器API)获得的信息填充$_SERVER['HTTPS'],它使用SAPI与web服务器软件通信。所以这可能是mod_php,或fcgi等…通常,这些数据由PHP通过SAPI从web服务器复制的环境变量填充。默认情况下,当通过HTTPS进行连接时,Apache httpd 包括HTTPS环境变量,但是如果您使用fastcgi_pass, nginx将。您需要通过修改nginx配置将fastcgi_param设置为HTTPS来自己配置。这将允许nginx通过fastcgi通知PHP -fpm环境变量,并且它可以相应地填充到PHP中。

还要注意,如果你使用nginx作为反向代理,这可能会变得更加复杂,因为反向代理也必须以同样的方式将信息传递给被代理的节点。

<标题>重要提示但是,您应该注意,使用PHP默认重定向到HTTPS可能是一个坏主意。最好将你的web服务器配置为这样做。

例如,在Apache httpd中,您可以将VHOST配置为默认情况下将所有HTTP流量重定向到HTTPS,如果您在某些PHP端点中碰巧忘记了这一点,这可能会更安全,更容易。这是假设您的意图是在您的整个网站或某些特定域强制执行HTTPS。