2011-06-16 44 views
0

我想在圖像上有條件地設置過期標頭,以便在項目處於開發階段時它們不會緩存,但會在生產階段進行緩存。理想情況下,這只是對apache conf文件的修改。我有一個Perl腳本,將返回的項目,它可以與mod_rewrite的使用狀況如下:有條件地在Apache配置中設置過期標頭

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" 

雖然中當然這是行不通的。

有沒有解決方法?

+0

嘿等等...這個問題是屬於這裏還是在ServerFault上? – 2011-06-16 15:49:22

回答

1

爲我工作一個小竅門是,首先設置標題無條件:

ExpiresByType image/jpg "now plus 1 second" 
... 

然後取消設置的情況下,我們在devel的模式頭:

Header set Cache-control "no-cache" env=devel 
Header unset expires env=devel 

這需要你有一個布爾env devel以前根據您的模式初始化。在我們的例子中,我們決定主機名是否要開發(devel.domain.com與www.domain.com)。

+0

目前,我們使用相同的URL進行開發和生產,並且唯一的方法是瞭解MySQL數據庫查詢(mod_rewrite中perl腳本的原因),我真的不想改變它;如果它歸結爲我認爲我會放棄這個功能(而不是在開發中的緩存),而不是(或改變我的後端腳本)。儘管如此,這可能是解決方案的一部分,因此得到了提升。 – 2011-06-16 15:46:49

+0

感謝您的回覆,我找到了答案,所以我接受了這一點,然後添加完整答案作爲答案。 – 2011-06-16 18:19:52

0

從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+)的文件夾)

rewriteruleE標誌讓您的規則匹配的情況下設置環境變量。 -實際上並不重寫任何內容。因此,它使用rewritecondrewriterule發送項目編號來檢查腳本的輸出,然後在兩個條件匹配的情況下設置環境變量。然後header有條件地根據該環境變量的存在性進行設置。

相關問題