【问题标题】:Manipulate Headers of PHP response in .htaccess-file?在 .htaccess 文件中操作 PHP 响应的标头?
【发布时间】:2016-07-01 12:48:04
【问题描述】:

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

我的文件中有以下 .htaccess 文件,它应该为我的 Apache 网络服务器提供的每个响应添加一个标头 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返回标头TestHeader: "It works."
    • 请求1.php 确实返回标头TestHeader
    • 请求2.php返回标头TestHeader: "Sent from PHP."

是否有可能使用 .htaccess 指令从 PHP 输出中操纵响应标头?

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

【问题讨论】:

  • 我知道这超出了范围,但只有 PHP 的解决方案能解决您的问题吗?一种在 PHP 中设置标头的方法,但适用于所有 PHP 脚本
  • 应该工作。例如,如果在1.php 中执行print_r(apache_response_headers()),则应该得到一个包含[TestHeader] =&gt; It works. 的数组(您可能需要先调用flush())。
  • @CD001:所以您是说 PHP 以某种方式删除了标头?
  • @BeetleJuice:实际上,我不想接触多个文件。 2.php 只是一个测试。
  • 你在使用 mod_php 吗?

标签: php apache .htaccess http-headers


【解决方案1】:

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

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

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

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

【讨论】:

  • PHP发送的响应头可以在.htaccess文件中使用“set”替换
【解决方案2】:

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

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

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

Header always add TestHeader "It works."

另见:

【讨论】:

  • 一旦你知道你必须搜索 FastCGI 和 Headers,你会发现很多问题 :-D ;我服务器上的版本其实是2.2.x
猜你喜欢
  • 1970-01-01
  • 2023-04-01
  • 2018-02-02
  • 2023-04-11
  • 2016-11-26
  • 1970-01-01
  • 1970-01-01
  • 2021-06-28
  • 1970-01-01
相关资源
最近更新 更多