php.ini show server https protocol

时间:2015-10-12 21:03:44

标签: php https

我想检测用户是通过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值 在服务器块中。傻我。

1 个答案:

答案 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_BOOLEANfalse"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。