2012-01-06 45 views
0

我試圖控制某個目錄內文件的緩存。我希望默認的緩存時間爲15分鐘,但我想讓應用程序在必要時進行更改。例如,我可能有一個PHP腳本,我想每1分鐘刷新一次,因此我將在PHP中爲該腳本設置緩存控制標頭。但對於所有其他文件,我只希望緩存時間爲15分鐘,其中一些是靜態文件,所以我不能只在PHP中設置默認緩存時間。如果未通過應用程序設置,請添加Apache標頭

我現在有這在我的Apache配置:

<Directory /> 
    Options FollowSymLinks 
    AllowOverride None 
    Header set Cache-Control "max-age=900" 
</Directory> 

本作的情況下,如果我只想要一個15分鐘的高速緩存99%的偉大工程。但是,如果我的PHP腳本設置了緩存控制標題,則此設置將覆蓋它。

我看過mod_header的文檔,並沒有任何設置(unset,add,append等)似乎給我我需要的東西。

在此先感謝。

回答

1

看看mod_expires而不是http://httpd.apache.org/docs/2.2/mod/mod_expires.html。該文件說,它不會覆蓋你的PHP腳本創建標題:

「當到期由CGI腳本生成或代理時,頭已經被 生成的服務器,例如響應的一部分 原始服務器,此模塊不會更改或添加Expires或 緩存控制標頭。「

下面是一個例子配置爲指定mod_expires:

<IfModule mod_expires.c> 
    ExpiresActive on 
    ExpiresDefault A600 
    ExpiresByType image/gif "access plus 1 day" 
    ExpiresByType image/jpeg "access plus 1 day" 
    ExpiresByType image/png "access plus 1 day" 
    ExpiresByType image/x-icon "access plus 1 day" 
    <FilesMatch "\.(php|php4)$"> 
     ExpiresByType text/html "now" 
    </FilesMatch> 
</IfModule> 

http://howto.gumph.org/content/reduce-webserver-bandwidth/

好運上當受騙!

+0

完美工作。謝謝! – 2012-01-06 17:50:53

1

根據PHP手冊

<?php 
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1 
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past 
?> 

通過發送上述標頭,應該可以覆蓋導致腳本輸出被緩存的設置。

+1

我在Apache中的設置將覆蓋我在PHP中設置的任何內容。所以,不幸的是,這對我不起作用。我很確定解決方案將不得不涉及Apache配置。 – 2012-01-06 16:26:15

相關問題