[英]Conditionally set expires headers in Apache config
我想在图像上有条件地设置到期标头,以使它们在项目开发时不会缓存,而在生产时会缓存。 理想情况下,这只是对apache conf文件的修改。 我有一个Perl脚本,它将返回项目的状态,可以与mod_rewrite一起使用,如下所示:
rewritemap PSTAT prg:/bin/pstat.pl
...skipping...
rewritecond ${PSTAT:$site:$1} =devel
rewriterule ^/run/$site/p(\d+)/(\w+) /logout.pl/$2 [NS,L]
如果能做类似的事情,那就太好了:
rewritecond ${PSTAT:$site:$1} =devel
ExpiresByType image/jpg "now plus 1 second"
虽然那当然是行不通的。
有什么解决办法吗?
对我有用的一个技巧是首先无条件设置标题:
ExpiresByType image/jpg "now plus 1 second"
...
然后在开发模式下取消设置标题:
Header set Cache-control "no-cache" env=devel
Header unset expires env=devel
这要求您具有一个先前根据您的模式初始化的布尔型env devel
。 在我们的案例中,我们决定是否要使用主机名(devel.domain.com与www.domain.com)。
从alienhard所说的开始,我设法为我的问题提供了答案。
rewritemap PSTAT prg:/bin/pstat.pl
...skipping...
rewritecond ${PSTAT:$site:$1} =devel
rewriterule ^/images/(\d+)/(\w+) - [E=devel:1]
header set cache-control "no-cache" env=devel
header unset expires env=devel
( /images/(\\d+)
是特定项目编号(\\d+)
的图像文件夹)
rewriterule
的E
标志使您可以在规则匹配的情况下设置环境变量。 -
实际上没有重写任何内容。 因此,该检查使用脚本的输出rewritecond
从发送它的项目数rewriterule
,然后设置环境变量中,这两个条件匹配的情况。 然后根据该环境变量的存在条件有条件地设置header
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.