2008-10-28 39 views
2

下面是問題:我們有很多Javascript和大量的CSS文件,我們寧願將它們縮小。縮小很簡單:設置YUI壓縮器,運行一個Ant任務,並且它將吐出縮小的文件,這些文件保存在原始文件旁邊。如何配置mod_rewrite以提供縮小文件(如果可用)?

因此,我們最終用下面的目錄結構我們的DocumentRoot內某處:

 
/
    /js 
     /min 
     foo-min.js 
     bar-min.js 
     foo.js 
     bar.js 
     quux.js 
    /css 
     ... 

現在我們需要的是阿帕奇從分鐘子目錄中的文件服務,和後備服務未壓縮的文件,如果他們的縮小版本不可用。最後一個問題是我無法解決的問題。

例如:假設我們要example.com/js/foo.js的請求 - 在這種情況下的Apache應該發送的/js/min/foo-min.js內容。有沒有精縮quux.js,所以請求/js/quux.js回報/js/quux.js本身,而不是404。最後,如果沒有/js/fred.js,它應該以404結尾。

實際上,我正在設置構建腳本,以便未在生產服務器上部署未定義的文件,但此配置對於集成服務器和開發計算機仍可能有用。

回答

5

下面是解決了所有的配置:

/js/.htaccess:

RewriteEngine On 

RewriteBase /js 

RewriteCond %{REQUEST_URI} ^/js/((.+)\.js)$ 
RewriteCond %{DOCUMENT_ROOT}/js/min/%2-min.js -f 
RewriteRule ^(.+)$ min/%2-min.js [L] 

同爲css目錄。

0

是否可以更改構建腳本?如果是這樣,你可以對它們進行配置以縮小這些文件併爲它們提供相同的文件名,但只有當提供了正確的標記(例如, ant productionDeploy而不是ant integrationDeploy。這樣,縮小過程對除構建腳本之外的所有內容都是完全透明的。

+0

是的,這是可能的,我正在以這種方式實施腳本。但是,在測試集成配置時,有兩個版本(原始版本和縮小版本)可能非常有用,以查看縮小版本是否沒有任何損壞。 – 2008-10-28 12:49:49

3

可以使用的RewriteCond來檢測縮小的文件的存在:

RewriteCond %{REQUESTURI} ^/js/(.*\.js) 
RewriteCond js/min/%1 -f 
RewriteRule %1 min/%1 [L] 
+0

不重寫... -f使用完全限定的文件名嗎?它從來沒有爲我工作的相對文件名。 – 2008-10-28 13:06:26

相關問題