2012-08-23 53 views
2

我使用Chrome來審覈我的網站,並且我發現.js和.css文件沒有被緩存,儘管我已將.htaccess文件設置爲這樣做。無法將緩存控件公開設置爲.js,.css和圖像文件

我刪除了從我的網站的根htaccess文件中除了下面的代碼以外的所有東西,我仍然在Chrome中看到消息「以下資源明確不可緩存,如果可能,請考慮讓它們可緩存」,表示我的主外部.js和.css文件沒有被緩存。這些文件和圖像佔總下載量的90%,因此無法緩存它們讓我瘋狂。

這是目前我的.htaccess文件的代碼。完全像這樣,仍然不會緩存任何東西。

# Disable Etags 
Header unset ETag 
FileETag None 

# Expires 
ExpiresActive On 
ExpiresDefault "access plus 1 year" 
Header unset Last-Modified 
Header set Cache-Control "public" 

<FilesMatch "\.(pl|php|cgi|spl|scgi|fcgi|html?)$"> 
Header set Cache-Control "private, must-revalidate, proxy-revalidate" 
ExpiresDefault A0 
ExpiresActive Off 
</FilesMatch> 

# Enable Compresion 
<FilesMatch ".(js|css|html|htm|php|xml)$"> 
SetOutputFilter DEFLATE 
</FilesMatch> 

你可以看到在http://lujanventas.com

如何設置緩存控制公衆的.css,.js文件和圖像文件的代碼不工作?

+0

「你可以看到這段代碼無法正常工作」:D ...無論如何,至少它是否正常DEFLATE? – Ryan

+0

另外,你爲什麼禁用ETags? – Ryan

+0

它似乎正在放氣,只是沒有緩存。關於ETags我讀過它對性能有好處。這是一個壞主意嗎? – lisovaccaro

回答

0

在寫作的那一刻起,你正在運行的服務器生成頭這樣對JavaScript:

Expires: access plus 1 day 

這是不正確,應該被替換爲有效日期和時間。所以它解釋了瀏覽器不能正確緩存資源。按照documentation,沒有理由不起作用。

配置中是否有隱藏字符阻止Apache2正確解析行?嘗試刪除行ExpiresDefault行,並在可靠的文本編輯器中從頭開始重新輸入。

如果仍然失敗,您的Apache2版本/二進制文件從哪裏來?

+0

@ Liso22謝謝你的賞金。我很想知道你的Apache2配置文件有什麼問題,你怎麼修復它? –

1
ExpiresActive On 
ExpiresDefault A0 

# 1 Week expire 
<filesMatch "\.(gif|jpg|jpeg|png|swf|css|js)$"> 
ExpiresDefault A604800 
Header append Cache-Control "public" 
</filesMatch> 

#No caching 
<filesMatch "\.(pl|php|cgi|spl|scgi|fcgi|html)$"> 
ExpiresActive Off 
Header set Cache-Control "private, no-cache, no-store, proxy-revalidate, no-transform" 
Header set Pragma "no-cache" 

我認爲這應該工作。

3

我不是一個緩存控制和過期頭文件的專家,但我總是使用這段代碼,它總是有效(我不太確定這是你在找什麼,但我發佈它,看看它是否爲你工作或沒有):

################# 
# CACHE HEADERS # 
################# 
## BEGIN Expire headers 
<IfModule mod_expires.c> 
    ExpiresActive On 
    ExpiresDefault "access plus 7200 seconds" 
    ExpiresDefault "access plus 1 seconds" 
    ExpiresByType image/jpg "access plus 2592000 seconds" 
    ExpiresByType image/jpeg "access plus 2592000 seconds" 
    ExpiresByType image/png "access plus 2592000 seconds" 
    ExpiresByType image/gif "access plus 2592000 seconds" 
    AddType image/x-icon .ico 
    ExpiresByType image/ico "access plus 2592000 seconds" 
    ExpiresByType image/icon "access plus 2592000 seconds" 
    ExpiresByType image/x-icon "access plus 2592000 seconds" 
    ExpiresByType text/css "access plus 2592000 seconds" 
    ExpiresByType text/javascript "access plus 2592000 seconds" 
    ExpiresByType text/html "access plus 7200 seconds" 
    ExpiresByType text/html "access plus 1 seconds" 
    ExpiresByType application/xhtml+xml "access plus 7200 seconds" 
    ExpiresByType application/xhtml+xml "access plus 1 seconds" 
    ExpiresByType application/javascript "access plus 2592000 seconds" 
    ExpiresByType application/x-javascript "access plus 2592000 seconds" 
    ExpiresByType application/x-shockwave-flash "access plus 2592000 seconds" 
</IfModule> 
## END Expire headers 
################# 
# CACHE CONTROL # 
################# 
## BEGIN Cache-Control Headers 
<IfModule mod_headers.c> 
    <FilesMatch "\\.(ico|jpe?g|png|gif|swf|gz|ttf)$"> 
     Header set Cache-Control "max-age=2592000, public" 
    </FilesMatch> 
    <FilesMatch "\\.(css)$"> 
     Header set Cache-Control "max-age=2592000, public" 
    </FilesMatch> 
    <FilesMatch "\\.(js)$"> 
     Header set Cache-Control "max-age=2592000, private" 
    </FilesMatch> 
    <filesMatch "\\.(html|htm)$"> 
     Header set Cache-Control "max-age=7200, public" 
     Header set Cache-Control "max-age=1, public" 
    </filesMatch> 
    # Disable caching for scripts and other dynamic files 
    <FilesMatch "\.(pl|php|cgi|spl|scgi|fcgi)$"> 
     Header unset Cache-Control 
    </FilesMatch> 
</IfModule> 
## END Cache-Control Headers 
######## 
# ETAG # 
######## 
## KILL THEM ETAGS 
Header unset ETag 
FileETag none 
0

在您的配置文件修改:

Header set Cache-Control "public" 

看起來像

Header set Cache-Control "public max-age=31536000" 

因此,您的文件至少緩存一年(最大年齡以秒爲單位)。

爲什麼?我加載了你的頁面兩次,我看到請求發送一個max-age=0

此外,看看這個page,它提供了一些在mod_expires模塊的見解。

相關問題