繁体   English   中英

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

[英]php is not getting custom headers (Apache 2.4 + FPM/FastCGI php 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时,它始终为空。

可能是什么原因?

因此,我实际上不确定您要做什么。

如果您尝试从请求到响应中添加以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脚本的每个标头创建一个规则,这听起来很痛苦。

如果我缺少某些内容,请在下面评论,然后我将更新此答案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM