Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为什么不是';t“U服务器[“HTTPS”设置为1?_Php_Apache_Webserver - Fatal编程技术网

Php 为什么不是';t“U服务器[“HTTPS”设置为1?

Php 为什么不是';t“U服务器[“HTTPS”设置为1?,php,apache,webserver,Php,Apache,Webserver,我的站点有一个SSL证书,我正在点击,但在PHP变量部分下,没有报告服务器[“HTTPS”]。我相信这会导致Drupal站点出现问题,其中一些URL会作为https://... 其他人被写为http://... 什么决定是否设置了_SERVER[“HTTPS”] 编辑:这可能就是我问题的答案。可能是负载平衡器问题它在文档$\u服务器['HTTPS'] Set to a non-empty value if the script was queried through the HTTPS pro

我的站点有一个SSL证书,我正在点击,但在PHP变量部分下,没有报告服务器[“HTTPS”]。我相信这会导致Drupal站点出现问题,其中一些URL会作为https://... 其他人被写为http://...

什么决定是否设置了_SERVER[“HTTPS”]



编辑:这可能就是我问题的答案。可能是负载平衡器问题

它在文档
$\u服务器['HTTPS']

Set to a non-empty value if the script was queried through the HTTPS protocol.
所以


事实证明,由于处理SSL加密/解密的负载平衡器,Web服务器没有获得$\u服务器[“HTTPS”],但设置了$\u服务器[“HTTP\u usesl”],可以用作SSL通信的闪存。

在代理/负载平衡器后面

$\u服务器['SERVER\u PORT']始终为80

$\u服务器[“HTTPS”]和$\u服务器[“HTTP\u usesl”]为空


我使用了$_SERVER['HTTP_X_FORWARDED_PROTO'],返回HTTP或https

添加到Arnaud Hallais'帖子中,我在本地主机(apache/mac)、测试服务器(apache/linux)和生产站点(iis/win)上获得正确协议的唯一方法是:

define("PROTOCOL", isset($_SERVER['HTTP_X_FORWARDED_PROTO']) ? $_SERVER['HTTP_X_FORWARDED_PROTO'] : ((isset( $_SERVER["HTTPS"] ) && strtolower( $_SERVER["HTTPS"] ) == "on" ) ? 'https' : 'http')); 

是的,但我要说的是当我看phpinfo()的输出时;它没有为_SERVER[“HTTPS”]显示任何内容……它根本没有设置,但应该尽我所能(SSL证书和url是https://...)这取决于您的服务器配置(Apache、nginx等)及其传递给PHP的变量。我想另一种方法是
$\u SERVER['SERVER\u PORT']=='443'
。在这里我做了一个函数(未测试)SSL端口在大多数情况下是443,但并不总是。它运行在什么Web服务器上?Apache和我很确定负载平衡器是问题所在。IT部门提到他们专门设置了PHP变量HTTP_usesl。更改安全页面模块以检查该变量而不是HTTPS。而不是更改默认模块(将在下一次升级中断),您可能需要考虑执行<代码> $yServer [’http'’=ISSET($yServer [ httpsi-USSeL')]?是“:”,而是放在boostrap文件的某个地方,这样以后的升级就不会中断。我同意……继承的代码。我将来可能会做这样的更改,这样模块本身就不会被黑客攻击。谢谢。这是很好的解决方案。对我来说工作很有魅力。谢谢
define("PROTOCOL", isset($_SERVER['HTTP_X_FORWARDED_PROTO']) ? $_SERVER['HTTP_X_FORWARDED_PROTO'] : ((isset( $_SERVER["HTTPS"] ) && strtolower( $_SERVER["HTTPS"] ) == "on" ) ? 'https' : 'http'));