Apache不会为PHP脚本设置头信息

5
这个.htaccess文件:
<IfModule mod_expires.c>
    ExpiresActive On
    ExpiresDefault "access plus 4 month"
</IfModule>
<IfModule mod_headers.c>
    Header merge X-ModHeaders "Yes, it is installed"
</IfModule>

在我的开发环境中(Windows环境,Apache/2.4.10,PHP作为Apache模块运行),代码可以正常工作,即生成所有资源(静态或动态)的适当标头。
但是,在我的生产服务器上(Linux环境,Apache/2.2.31,PHP作为FastCGI运行,使用mod_fcgid/2.3.9),它仅适用于静态资源,而不适用于PHP脚本。
我是否正确地怀疑这种差异来自PHP SAPI?是否有一种方法可以修复它,以便我不需要复制生成HTTP标头的代码?

PHP可以编辑头文件,但这并不意味着它会默认这样做。你仍然应该以任何方式获取这些。 - Machavity
1
认为这里的答案适用:http://serverfault.com/questions/383011/mod-headers-not-sending-headers-when-file-is-php ... 没有深入挖掘,但阅读了它所引用的那些错误报告。 - ficuscr
你的生产环境是否在共享主机上?这可能会阻止你更改某些Apache模块... - Luc Laverdure
@LucLaverdure - 是的,这是共享主机。如果是专用服务器,我将能够更改什么? - Álvaro González
你可以在专用主机上更改所有内容,你使用的是共享主机吗?可能有一些解决方案是针对这个主机提供商特定的。 - Luc Laverdure
显示剩余3条评论
1个回答

4
如果PHP通过mod_proxy_fcgi运行,则可能涉及不到文件系统目录,因此可能无法进行htaccess查找。
现在手册中有一种更新的php+mod_proxy_fcgi版本,使用SetHandler而不是ProxyPass,这允许处理像htaccess这样的东西,因为核心实际上会首先在文件系统中查找URL。

服务器正在使用“mod_fcgid/2.3.9”,并且.htaccess文件肯定被执行,因为其他模块正常工作(例如mod_rewriteAddHandler指令选择PHP版本),而无效的指令会导致状态500响应。 - Álvaro González
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Álvaro González
对我来说,这是原因:我切换到我的共享主机上的PHP模块,然后Header set生效了。 - Andy
我最终从HSP支持团队那里得到了确认,他们的mod_fcgid设置阻止了在.htaccess中设置的自定义标头起作用。(非常抱歉当时没有及时回复!) - Álvaro González
@ÁlvaroGonzález,您能否提供更多信息吗?您知道他们具体修复了什么问题吗?我也遇到了完全相同的问题... - Adrian Föder
1
据我所知,他们并没有修复任何问题。我的托管提供商的特定设置不允许这些指令对它们处理的文件产生影响。但由于该问题仅影响PHP文件,因此可以使用“header()”轻松编写PHP解决方法。 - Álvaro González

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接