操纵 .htaccess-file 中 PHP 响应的 Headers?

Manipulate Headers of PHP response in .htaccess-file?

是否可以将 headers(在 .htaccess 文件中定义)添加到 PHP 生成的响应中?

我的文件中有以下 .htaccess 文件,它应该向我的 Apache Web 服务器传送的每个响应添加一个 Header TestHeader

#<IfModule mod_headers.c>
#  Header unset X-Powered-By
  Header add TestHeader "It works."
#</IfModule>

我在该文件夹中还有另外三个文件:

  1. html.html

    <html>content</html>
    
  2. 1.php

    <?php
    echo "<html>content php</html>";
    
  3. 2.php

    <?php
    header("TestHeader: Sent from PHP.");
    echo "<html>content php</html>";
    
    • 请求 html.html return header TestHeader: "It works."
    • 请求1.php return header TestHeader
    • 请求 2.php return header TestHeader: "Sent from PHP."

是否可以使用 .htaccess 指令以某种方式操纵来自 PHP 输出的响应 header?

编辑:PHP 在服务器上作为 FastCGI 运行。

您可以使用 SetEnvIf 然后相应地添加 header:

SetEnvIf Request_URI "\.php$" phpfile
Header set TestHeader "Sent from PHP" env=phpfile

如果请求 URL 以扩展名“.php”结尾,则 SetEnvIf 将设置一个变量 "phpfile"。如果变量 "phpfile" 仅存在,则 TestHeader: Sent from PHP 将作为响应 header 发送。 您可以根据需要将此逻辑用于任意数量的扩展或 URL 模式。

编辑:如果 header 已经存在,即它是从 PHP 发送的,那么使用 Header Set apache 将用新值替换它。

这可能是您的 Apache 版本问题以及 PHP 作为 FastCGI 运行的事实。

在 Apache 2.2.X 中有一个错误:https://bz.apache.org/bugzilla/show_bug.cgi?id=49308

我发现了一些建议使用 always 条件来解决问题的其他帖子:

Header always add TestHeader "It works."

另见: