php没有获得自定义标头(Apache 2.4 + FPM/FastCGI php 7)

log*_*gic 5 php apache2 request-headers http-headers apache2.4

我试图通过使用apache_request_headers(),$ _SERVER,$ _ENV和getallheaders()获取所有标头.

我知道Apache 2.4出于安全原因丢弃了未知头文件,并尝试通过添加以下内容来规避它:

SetEnvIfNoCase ^X (.*) HTTP_CUSTOM=$0
RequestHeader set HTTP_CUSTOM %{HTTP_CUSTOM}e env=HTTP_CUSTOM
Run Code Online (Sandbox Code Playgroud)

它成功捕获/重命名已知标题,但在尝试捕获X-Custom-Header时,它始终为空.

可能是什么原因?

bas*_*ero 1

所以我实际上不确定你想做什么。

如果您尝试将请求中以 X 开头的标头添加到响应中,那么我会在您的 htaccess 文件中使用它。

Header echo ^X
Run Code Online (Sandbox Code Playgroud)

如果您尝试在 PHP 脚本中使用标头值,那么它们应该位于您的$_SERVER数组中,但名称已标准化。例如

X-Custom-Header: blah
X-Na-Bra: true
Run Code Online (Sandbox Code Playgroud)

可以从以下位置访问

<?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'];
?>
Run Code Online (Sandbox Code Playgroud)

听起来您想从以 X 开头的动态数量的标头中获取值。如果是这种情况,那么您的代码将无法正常工作。您的代码(如果有效)将始终包含以 X 开头的标头的最后一个值。因此,如果您有超过 1 个以 X 开头的标头,那么您将丢失值。使用您的代码,您需要为要传递给 PHP 脚本的每个标头创建一个规则,这听起来很痛苦。

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