我想检测用户是通过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_var
与FILTER_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中。
<标题>重要提示但是,您应该注意,使用PHP默认重定向到HTTPS可能是一个坏主意。最好将你的web服务器配置为这样做。还要注意,如果你使用nginx作为反向代理,这可能会变得更加复杂,因为反向代理也必须以同样的方式将信息传递给被代理的节点。
例如,在Apache httpd中,您可以将VHOST配置为默认情况下将所有HTTP流量重定向到HTTPS,如果您在某些PHP端点中碰巧忘记了这一点,这可能会更安全,更容易。这是假设您的意图是在您的整个网站或某些特定域强制执行HTTPS。
标题>