我想有条件地在图像上设置过期标头,以便它们不会在项目开发时缓存,而是在生产中缓存。 理想情况下,这只是对 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
这要求您事先根据模式初始化布尔环境devel
。在我们的例子中,我们决定是否要开发主机名(devel.domain.com 与 www.domain.com(。
从异形哈德所说的开始,我设法想出了我问题的答案。
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
根据该环境变量的存在有条件地进行设置。