[英]Overwrite cache-headers with mod_expires
我想使用apache中的mod_expires模块设置cache-headers。 我的配置看起来像这样:
<LocationMatch ^/static >
ExpiresDefault "access plus 1 years"
</LocationMatch>
问题是,文件是由我无法控制的第三个系统生成的。 这些系统提供带有以下标题的文件:
Date Mon, 24 Oct 2011 08:39:02 GMT
Cache-Control no-cache,no-store,must-revalidate
Pragma no-cache
Expires Thu, 01 Dec 1994 16:00:00 GMT
这些标头使得无法使用mod_expires设置缓存标头。 http://httpd.apache.org/docs/2.2/mod/mod_expires.html告诉我们原因:
当Expires标头已经是服务器生成的响应的一部分时,例如,当由CGI脚本生成或从源服务器代理时,此模块不会更改或添加Expires或Cache-Control标头。
是否有任何可能的方法来规避此规则并使用mod_expires覆盖标头?
更新:一种可能的解决方案是,为了避免此限制,仅使用mod_headers来设置缓存标头。 不幸的是,这不是一个替代方案,因为必须计算这些值。
谢谢它提前。
不幸的是,这是一个已知的限制,我们不得不退回只使用mod_headers
。
Regilero的建议不起作用,因为在mod_expire
指令之后,在响应处理中很晚才会处理头指令。 因此,在mod_expires
(或没有)它应该执行的操作后,您将取消设置标头。
如果它是apache 2.2,你可以尝试在每个header指令的末尾early
放置。 这将告诉它在响应处理的早期阶段而不是在最后阶段执行此操作。
所以尝试:
<LocationMatch ^/static >
Header unset Cache-Control early
Header unset Pragma early
Header unset Expires early
ExpiresDefault "access plus 1 years"
</LocationMatch>
没有测试过,但试一试......
你尝试过将它与mod_headers混合使用吗?
<LocationMatch ^/static >
Header unset Cache-Control
Header unset Pragma
Header unset Expires
ExpiresDefault "access plus 1 years"
</LocationMatch>
未经测试,但在......的情况下
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.