PHP无法获取自定义头信息(Apache 2.4 + FPM / FastCGI PHP 7)

7

我尝试使用apache_request_headers()、$_SERVER、$_ENV和getallheaders()获取所有标题。

我知道Apache 2.4为了安全原因而放弃了未知的标题,并尝试通过添加以下内容来规避此问题:

SetEnvIfNoCase ^X (.*) HTTP_CUSTOM=$0
RequestHeader set HTTP_CUSTOM %{HTTP_CUSTOM}e env=HTTP_CUSTOM

已经成功捕获/重命名了已知的标头,但是在尝试捕获X-Custom-Header时,它始终为空。可能的原因是什么?


apache2ctl -V 命令返回什么? 你是否尝试过使用 add 或 merge 进行测试? RequestHeader add HTTP_CUSTOM %{HTTP_CUSTOM}e env=HTTP_CUSTOM - Alexandre Tranchant
@logic,我的回答有效吗? - bassxzero
1个回答

1
所以我其实不确定你想做什么。
如果你想将请求中以X开头的头信息添加到响应中,那么我建议在你的htaccess文件中使用以下内容。
Header echo ^X

如果您想在PHP脚本中使用标题值,则它们应该在您的$_SERVER数组中,但名称已经标准化。例如:
X-Custom-Header: blah
X-Na-Bra: true

可以从以下地址访问:
<?php 
   // note that headers are prefixed with "HTTP" and "-" and changed to "_"
   echo $_SERVER['HTTP_X_CUSTOM_HEADER'];
   echo $_SERVER['HTTP_X_NA_BRA'];

  // either way you should be able to find them with a print_r($_SERVER);
  // print_r(getallheaders()); should show the headers without normalized names
  $tempArray = getallheaders();
  echo $tempArray['X-Custom-Header'];
?>

听起来你想从一系列以X开头的动态标题中获取值。如果是这样,那么无论如何你的代码都不会起作用。你的代码(如果它能工作)将始终包含以X开头的标题的最后一个值。因此,如果您有多个以X开头的标题,则会丢失值。使用您的代码,您需要为每个要传递到PHP脚本的标题创建一个规则,这听起来很痛苦。

如果我漏掉了什么,请在下面评论,我会更新这个答案。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接