2011-09-01 39 views
4

而不是生成鏈接到file.js,我正在計算版本號或哈希總和並鏈接到file--bbe02f946d.js。我使用下面的重定向規則,然後提供服務的文件的當前版本:取決於請求啓用mod_expire

RewriteRule ^(.*)--[a-z0-9]+\.js$ $1.js 

現在,我想設置極爲遙遠Expires頭這些請求:

ExpiresActive on 
ExpiresByType application/javascript "access plus 1 year" 

這工作正常,但也適用於尚未版本化的資源(/file.js請求)。我如何才能爲符合RewriteRule的請求設置expires頭文件?通常情況下,我會使用<LocationMatch>,但這是不可用的,因爲應用程序必須能夠在任何可以修改htaccess的服務器上運行。

+2

我建議1)使用設置一些環境變量重寫規則'[E]'標誌(http://httpd.apache.org/docs/current/rewrite/flags.html#flag_e)。2)然後使用[Header](http://httpd.apache.org/docs/current/mod/ mod_headers.html#header)根據這種變量值/存在性設置適當的頭文件 – LazyOne

+1

如果上述不起作用,並且您不會找到y其他工作解決方案..那麼也許你可以以某種方式從不同的文件夾提供這些版本化版本和尚未版本化的資源 - 然後你可以很容易地在本地.htaccess文件中應用這樣的頭文件。 – LazyOne

+0

@LazyOne謝謝,我會盡量使用變量。太悲傷,你懶得寫一個完整的答案;) – phihag

回答

0

您可以使用htaccess添加新的MIME類型並設置自定義過期標頭。

例使用.xjs

<IfModule mod_mime.c> 
    AddType application/x-javascript .xjs 
</IfModule> 

<IfModule mod_gzip.c> 
mod_gzip_item_include file \.xjs$ 
</IfModule> 

<FilesMatch ".(xjs)$"> 
Header set Cache-Control "max-age=43200" 
</FilesMatch> 

或者僅使用正則表達式中FilesMatch,以配合您的JS文件

<FilesMatch "--[a-z0-9]+\.js$"> 
Header set Cache-Control "max-age=43200" 
</FilesMatch>