2011-10-18 29 views
10

我想根據訪問的路徑文件來有條件地設置緩存標頭。基本上,訪問http://www.example.com/cache/$cache_key/*應該在將來的緩存標題中提供遠處的文件。有條件地在apache中設置緩存標頭

我正在使用重寫規則來設置環境變量,然後嘗試基於該變量設置緩存控制標頭。但是,似乎變量在過程中被設置得太晚了或什麼東西;條件頭規則永遠不會被執行。

RewriteRule ^cache/.*?/(.*) /$1 [env=asset:true,L] 
Header set Cache-control "max-age=30" 
Header set Cache-Control "max-age=31536000" env=asset 
Header unset ETag env=asset 

有沒有更好的方法來做到這一點?我嘗試了幾個Directory和Location塊的組合,但沒有成功。

回答

19

使用phpinfo()我確定環境變量最終在重寫的請求上完全沒有設置,所以問題不在於請求的順序,而是它似乎拋出了變量。使用查詢字符串,而不是URL和而不是重寫似乎是我能得到這個工作的唯一方法。我同意,看來應該是是更好的方法。

RewriteCond %{QUERY_STRING} longcache=true(&|$) 
RewriteRule .* - [ENV=LONGCACHE:true,L] 

Header set Cache-Control "max-age=30" env=!LONGCACHE 
Header set Cache-Control "max-age=31536000" env=LONGCACHE 

更多獲得BY睜眼不同的答案:

asset環境變量被重定向後更名爲REDIRECT_asset,所以你的條件標題指令必須是:

Header set Cache-Control "max-age=31536000" env=REDIRECT_asset 
+1

是,就是這樣,REDIRECT_asset,謝謝他。 – regilero

+0

謝謝,不知何故,我錯過了這個答案。 – mike