我已将 .htaccess 文件设置为以下内容:
Header set MyHeader "I'm Set!"
如果我进入该目录 ( http://example.com/test/
)(该目录没有默认索引文件)并查看网络活动(在本例中使用 Chrome),我可以看到正在发送标头。如果我进入 php 文件 ( http://example.com/test/test.php
),则不会发送标头。
我创建了一个 index.html(<pre>Hi
内容为 simply),然后发送了。我将文件名改为.php
,没有标题。如果我将原始文件改为,它会输出垃圾代码,并且发送标题。如果我更改为test.php
,我会得到一个损坏的图像图标,并且发送标题。test.html
test.php
test.png
因此,如果不对上述 mime 类型和文件扩展名进行测试,似乎只有.php
文件(合法或非法)设置为不应用 .htaccess 规则或特别是 mod_headers 指令。但我不知道如何测试这一点,而且由于它是共享服务器,我无权进行httpd.conf
探索。
关于为什么 apache 会跳过发送 php 文件的标头,您有什么想法吗?
我也尝试过:
<FilesMatch "\.(php)$">
Header set MyHeader "I'm Set!"
</FilesMatch>
答案1
这是运行 CGI 脚本时的预期行为。从最新 (2.4) 版本的mod_headers 文档:
在与下列情况类似的情况下,可能需要将 onsuccess 的默认值更改为 always。另请注意,在某些情况下,在两种条件下重复此指令是有意义的,因为对于现有标头而言,always 不是 onsuccess 的超集:
[...]
您正在修改或删除由 CGI 脚本生成的标头,在这种情况下,CGI 脚本位于与始终对应的表中,而不是在默认表中。
最初的问题(也许有更好的解释)在于错误 49308。