我想检测用户是通过http还是https导航 并在网站的某些区域切换到https。问题是 我的服务器没有显示$ _SERVER ['HTTPS']所以我想我会 必须配置php.ini来显示它。
我似乎无法弄清楚,在php上改变了什么值 ini来表明这一点。
谢谢。
编辑:我并不是想找到另一种检测https使用方法的方法。 我问如何编辑php.ini以便显示$ _SERVER ['HTTPS'] 我访问https://
时的值Edit2:也许还不够清楚。 $ _SERVER ['HTTPS'] 并非全部存在
更新/答案: 感谢@Sheriff,我把
fastcgi_param HTTPS on;
fastcgi_param HTTP_SCHEME https;
在我的虚拟主机文件中的此块内 location~.php $ { }
现在$ _SERVER显示
[HTTPS] => on
[HTTP_SCHEME] => https
之前它没有用,因为我把fastcgi param值 在服务器块中。傻我。
答案 0 :(得分:1)
$_SERVER['HTTPS']
没有php.ini配置。如果请求是通过HTTPS进行的,则此密钥设置为非空值仅 。含义,if (!empty(filter_var($_SERVER['HTTPS'], FILTER_VALIDATE_BOOLEAN))) { /* request was made over https */ }
。
有关详细信息,请参阅the manual ...
如果此值为'HTTPS'
如果通过HTTPS协议查询脚本,则设置为非空值。
注意:强>
请注意,在IIS中使用ISAPI时,如果请求不是通过HTTPS协议进行的,则值为
off
。
FILTER_VALIDATE_BOOLEAN
,false
,"0"
,"false"
,则"off"
filter_var
将返回布尔值"no"
,""
或NULL
。
同样重要的是要记住,PHP只会通过它用来与您的Web服务器软件通信的SAPI(服务器API )获取的信息填充$_SERVER['HTTPS']
。所以这可能是mod_php,或fcgi等...通常这些数据会从PHP从Web服务器通过SAPI复制的环境变量中填充。默认情况下,当通过HTTPS建立连接时,Apache httpd 将包含HTTPS环境变量,但如果您使用fastcgi_pass
,则nginx将不。您需要通过修改nginx配置为fastcgi_param
设置HTTPS
来自行配置。这将允许nginx通过fastcgi通知php-fpm环境变量,并且可以在PHP中相应地填充它。
另请注意,如果您使用nginx作为反向代理,这可能会变得更加复杂,因为反向代理也必须以相同的方式将信息传递给代理节点。
但是,您应该注意,默认情况下使用PHP重定向到HTTPS可能是一个坏主意。最好将您的网络服务器配置为执行此操作。
例如,in Apache httpd you can configure your VHOST to redirect all HTTP traffic to HTTPS by default,如果您在某些PHP端点碰巧忘记了这一点,它可能会更安全,更容易。这假设您的意图是在整个网站或某个特定域中强制执行HTTPS。