在使用之前,首先要確認一下”mod_expires”模組是否有啟用.如果是自己安裝Apache來架設網頁主機的話,這裡我們可以透過編輯Apache的”httpd.conf”設定檔來處理.搜尋一下,你可能會找到這麼一行:
將該行前面的”#”字號刪除,然後將”httpd.conf”設定檔儲存後,重新啟動Apache來使這個更新生效.
當然如果我們是租用虛擬主機的話,”httpd.conf”設定檔我們一般用戶是接觸不到的,而在網站根目錄裡寫個”.htaccess”設定檔, 我想在運用上相對是較靈活的.”mod_expires”的設定資料除了可以寫在Apache的”httpd.conf”設定檔中,也可以寫 在”.htaccess”設定檔裡.
我們知道在使用浏覽器浏覽網頁時,浏覽器會把網頁資料快取(Cache)下來儲存在本機端,用以加快下回浏覽相同網頁時不必再重新由網站上下載,進 而有加速的效果.使用mod_expires模組來加速網頁浏覽,這裡所謂的”加速”,其實是利用”mod_expires”的功能,來設定網頁文件的過 期時間,加長網頁文件被浏覽器快取(Cache)保存的時間.如此一來,只要網頁文件的過期時間未到,浏覽器就會引用快取的資料,而不用花時間再去下載網 站上的資料.另一方面帶給站長的好處是,可以減少浏覽者對網站的流量耗用(例如有些虛擬主機有限制網站可使用的流量).
接下來我們直接由范例中來學習吧.
范例一:
范例二:
范例三:
使用<IfModule></IfModule>來包夾指令可以避免在mod_expires模組沒有啟用的情況下還要去 執行.如果mod_expires模組確定已經啟用,那不寫<IfModule></IfModule>也沒關係.
ExpiresActive On是指啟用mod_expires功能,相對的Off就是關閉功能.
ExpiresDefault指令是設定預設的過期時間.
從范例一和范例二中,各位可以看到關於時間設定的方式有分兩種,一個是文字敘述型,一個是代碼加上秒數型.
文字敘述型:
“access plus 10 days”意指浏覽時起算10天.依照Apache官方說明文件,過期起算時間有三種,分別是access、now 以及modification.其中access與now意義相同,而modification指的是網頁文件的”最後編輯時間”.所以如果要以檔桉的最 後編輯時間起算,可以寫成這樣,”modification plus 10 days”.而時間的指定也很簡單,就是英文單字(years、months、weeks、days、hours、minutes、seconds).例 如,可以寫成這樣,”access plus 1 month 15 days 2 hours”.
代碼加上秒數型:
A86400意指浏覽時起算1天.格式是代碼加上秒數.代碼有分兩種,”A”等同”access”,意指浏覽時起算過期時間.使用代碼”A”比較適合應用 在不常變動的網頁文件類型,例如圖片.另外一種代碼是”M”,其意義等同於”modification”,指的是網頁文件的”最後編輯時間”.使用代 碼”M”比較適合應用在經常變動的網頁文件類型,例如HTML頁面這類經常更新內容的資料.秒數資料我在文後附上參考資料,可以供各位快速參考.
ExpiresByType指令是依照不同的網頁文件型態來做過期時間設定.
例如,ExpiresByType text/css A2592000,意指網站上的CSS風格檔3天後過期; ExpiresByType image/gif A604800,意指網站上的Gif圖檔在7天後過期.
范例三裡,使用了<FilesMatch></FilesMatch>來包夾各型態的網頁文件,而不是使用”ExpiresByType”指令,這也是一種用法.
利用Apache模塊mod_expires和mod_headers實現文件緩存,Add an Expires header|為文件頭指定Expires
大家在使用YSlow的網站速度優化,常會看到Add an Expires header這一條分值很低,搜索很多但還不知道怎麼該。下面就是答案。
Add an Expires header / 為文件頭指定Expires
給靜態文件加上過期標志。讓浏覽器或者CDN服務器緩存起來,加速圖片和其他靜態文件的加載。
Expires是浏覽器Cache機制的一部分,浏覽器的緩存取決於Header中的四個值: Cache-Control, Expires, Last-Modified, ETag。
優化這個選項,所要做的是對站內所有的文件有針對性的設置Cache-Control和Expires.
我們要實現加上過期標志可以利用apache模塊mod_expires和mod_headers。
通過配置.htaccess文件, 可以輕易地按文件類別設置緩存時間。對提高網站速度有一定幫助。
1. 利用mod_expires
在.htaccess中添加如下語句:
<ifmodule mod_expires.c>
expiresactive on
#默認所有文件緩存時間設置為300秒
expiresdefault a300
#html,plain-text緩存300秒
expiresbytype text/html a300
expiresbytype text/plain a300
#css, javascript緩存一個小時
expiresbytype text/css a3600
expiresbytype application/x-javascript a3600
#圖標文件緩存30天
expiresbytype image/x-icon a2592000
#image類緩存一個星期
expiresbytype image/jpeg a604800
expiresbytype image/gif a604800
expiresbytype image/png a604800
#其它文件緩存一個星期
expiresbytype application/x-shockwave-flash a604800
expiresbytype video/x-flv a604800
expiresbytype application/pdf a604800
</ifmodule>
但有一個問題是我們常用的Apache主機經常不怎麼支持mod_expires,沒有關系,我們用另一個模塊使用mod_headers。
同樣在.htaccess文件中添加如下內容可以實現緩存:
<ifmodule mod_headers.c>
# htm,html,txt類的文件緩存一個小時
<filesmatch “\.(html|htm|txt)$”>
header set cache-control “max-age=3600″
</filesmatch>
# css, js, swf類的文件緩存一個星期
<filesmatch “\.(css|js|swf)$”>
header set cache-control “max-age=604800″
</filesmatch>
# jpg,gif,jpeg,png,ico,flv,pdf等文件緩存一年
<filesmatch “\.(ico|gif|jpg|jpeg|png|flv|pdf)$”>
header set cache-control “max-age=29030400″
</filesmatch>
</ifmodule>
以下為樣本代碼:
<FilesMatch “\.(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf)$”>