2013-09-30 76 views
0

我想更改子文件夾的緩存屬性,但它似乎沒有按預期工作。而不是foo/images中的文件和foo/icons被緩存,它們會以no-cache設置返回。子目錄的Apache配置覆蓋

# enable caching for static files 
<Directory ~ "^/web/foo/(images|icons)"> 
    ExpiresActive On 
    # cache images and media for 7 days 
    ExpiresDefault A604800 
    Header append Cache-Control "public, proxy-revalidate" 
</Directory> 

<Directory ~ "^/web/(foo|bar)"> 
    ExpiresActive On 
    ExpiresDefault A0 
    Header set Cache-Control "no-cache, no-store, must-revalidate, max-age=0, proxy-revalidate, no-transform" 
    Header set Pragma "no-cache" 
</Directory> 

我基本上希望一切都不緩存,除非它們在某些子文件夾中。我的理解是,具有正則表達式匹配的目錄將按照列出的順序進行匹配。

請記住,我的真實網站比這個假例要複雜得多。所以是的,我知道我可以將默認值設置爲不緩存,然後將其設置爲每個目錄,但是我不能在此配置上實際執行此操作,所以我只想使用Directory指令和沒有.htaccess文件來執行此操作。

+0

它只是你看到的'Pragma'頭部(會一直設置爲btw)嗎?或者它也是'Cache-Control'嗎? – Qben

+0

它看起來像這些指令都是針對子文件夾運行的,所以對於Cache-Control,您最終會得到'no-cache,no-store,must-revalidate,max-age = 0,proxy-revalidate,no-transform,公開,代理重新驗證「 – Toxikman

+0

您是否在下面的答案中嘗試了我的建議? – Qben

回答

1

我認爲你的問題是兩個<Directory ~ "..">設置都是有效的。這將使不那麼具體的(^/web/(foo|bar))覆蓋您在imagesicons目錄中所做的更改。您可以嘗試從父項Directory中排除這些目錄。

<Directory ~ "^/web/(foo|bar)(?!(/icons|/images))"> 
    ExpiresActive On 
    ExpiresDefault A0 
    Header set Cache-Control "no-cache, no-store, must-revalidate, max-age=0, proxy-revalidate, no-transform" 
    Header set Pragma "no-cache" 
</Directory> 

希望它可以幫助你盼着。