1

我想有条件地在图像上设置过期标头,以便它们在项目开发时不会缓存,但在生产时会缓存。理想情况下,这只是对 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"

虽然这当然行不通。

有什么解决办法吗?

4

2 回答 2

1

对我有用的一个技巧是首先无条件地设置标题:

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)。

于 2011-06-16T15:36:12.210 回答
0

从外星人哈德所说的开始,我设法想出了我的问题的答案。

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+)

E标志rewriterule允许您在规则匹配的情况下设置环境变量。 -实际上并没有重写任何东西。因此,这会使用rewritecond从 发送项目编号来检查脚本的输出rewriterule,然后在两个条件匹配的情况下设置环境变量。然后header根据该环境变量的存在有条件地设置。

于 2011-06-16T18:30:31.033 回答