问题描述
|
我想在图像上有条件地设置到期标头,这样它们在项目开发时就不会缓存,而在生产中时会缓存。理想情况下,这只是对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 4。在我们的案例中,我们决定是否要使用主机名(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
。