当文件是PHP时,mod_headers不发送头文件


9

我将.htaccess文件设置为以下内容:

 Header set MyHeader "I'm Set!"

如果转到http://example.com/test/没有默认索引文件的目录(),并查看网络活动(在本例中为Chrome),则可以看到正在发送标头。如果我转到php文件(http://example.com/test/test.php),则不会发送标头。

我创建了一个index.html(仅<pre>Hi作为内容)并将其发送。我将文件名更改为.php,没有标题。如果我将orignal更改test.phptest.html,则会输出看起来很垃圾的代码,并发送标头。如果更改test.phptest.png,则会得到一个损坏的图像图标,并且将发送标题。

因此,如果没有对mime类型和文件扩展名进行以上测试,则似乎只有.php文件(合法或其他)设置为不应用.htaccess规则,或者特别是mod_headers指令。但是我不知道如何测试,因为它是一台共享服务器,所以我无权httpd.conf访问。

关于为什么Apache会跳过发送PHP文件头的任何想法?

我也尝试过:

 <FilesMatch "\.(php)$">
     Header set MyHeader "I'm Set!"
 </FilesMatch>

从PHP / CGI更新到PHP / FastCGI似乎已经修复了它。如果有人知道根本原因,我仍然非常渴望获得反馈。
安东尼

1
安东尼,您使用过mod_fastcgi吗?我遇到的行为完全相同,在我看来mod_fastcgi破坏了mod_headers功能。:我昨天张贴了这个bug报告bugs.launchpad.net/ubuntu/+source/libapache-mod-fastcgi/+bug/...
Onkeltem

同样在这里:/任何新闻或解决方法?我无法想象在更多情况下这不是问题……
AdrianFöder17年

Answers:


4

运行CGI脚本时,这是预期的行为。从最新的(2.4)版本的mod_headers docs中

在类似于下面列出的情况下,可能需要将成功的默认值更改为始终。还请注意,在某些情况下,在两种情况下都重复此指令是有意义的,因为相对于现有标头而言,它始终不是onsuccess的超集:

[...]
您正在修改或删除由CGI脚本生成的标头,在这种情况下,CGI脚本位于对应于always的表中,而不位于默认表中。

最初的问题(可能有一个更好的解释)是在Bug 49308中


如果我没看错,使用Header always set MyHeader "I'm Set!"应该可以解决问题。我想我找到了一个答案,有人提出了这个建议,在这种情况下,它也不适用于OP。但是我也很确定他们说要尝试Header set always,这可能就是该建议失败的原因。
安东尼

不,我拿回去。我按了那个尝试,那是Header always set。我只是看错报价了吗?
安东尼

在您最初的问题中,您没有指定该问题;你确定它的设置吗?Header always set MyHeader "I'm Set!"根据您的示例,它应该类似于。
Andrew M.

好吧,尽管没有Apache的认可,我确实尝试过,所以我可能放弃了一次尝试。现在它可以正常工作了,我只是假设这是从CGI到FastCGI的切换,但是我对周围的一切都感到怀疑。
安东尼
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.