2011-09-05 85 views
4

我的web服務器的文件系統是等同於以下:維護(子)域資產的最佳實踐?

/master-domain.tld 
/master-domain.tld/assets/js/foo.js 
/master-domain.tld/assets/css/bar.css 

/sub1.master-domain.tld 
/sub1.master-domain.tld/assets/js/foo.js 

/sub2.master-domain.tld 
/sub1.master-domain.tld/assets/css/bar.css 
... 

我想知道的是如何爲我的普通的靜態資產(託管在主域)我subdomains--原因是,我當時只需要維護一套「主」資產,而不是每次編輯它時將任何文件更新/複製到所有其他子域。顯然,這可以通過使用絕對URL來實現,但我的目標是避免這些問題,以便在設計/調試時我的本地/ dev系統不需要進行任何遠程調用。

目前,我有一個mod_rewrite +符號鏈接+ php腳本組合設置爲每個子域,將任何調用不存在的本地資產鏈接到主資產。例如調用「/sub1.master-domain.tld/assets/css/bar.css」將檢索主域域上承載的bar.css文件,因爲bar.css的本地版本不存在。此外,調用「/sub1.master-domain.tld/assets/js/foo.js」將服務於foo.js的本地版本,因爲它確實存在。

但我目前的方法似乎阻礙了我的頁面加載的性能,我不知道是否有更好的(仍然模塊化)的方法來解決這個問題。

任何提示?我是否完全用錯誤的方式來解決這個問題?

回答

0

如果它們在同一臺計算機上,爲什麼不將不同的虛擬主機別名指向同一個文檔根目錄?

+0

也許我誤解,但我想你的意思是做這樣的事情?: '<虛擬主機*:80> 的DocumentRoot「/path/to/master-domain.tld」 服務器名稱主域。 tld ServerAlias sub1.master-domain.tld 但是,這不會允許我在子域上託管站點本身...(因爲,AFAIK,我無法指定特定的文件路徑在ServerAlias語句中)。除非你打算使用mod_alias來代替 - 但這基本上等同於我現在設置的符號鏈接,不是嗎? –

0

我會使用保留的靜態。爲此目的的子域名並針對該域名的所有請求。

+0

我相信這相當於使用絕對URL;我必須列出文件src的如下: '',這不會履行我的作爲本地/遠程主機獨立的目標。 –

1

符號鏈接應該是所有必需的,如果他們都在同一臺服務器上。這應該不會導致任何性能命中。例如。

/sub1.master-domain.tld/assets -> /master-domain.tld/assets 

如果你的子域從多臺服務器提供服務,我會成立一個mod_rewrite的規則與302重定向到主域的完整URL。在該主域服務器上,我將設置mod_expires,以便資源被緩存,避免大多數後續請求到達子域上的相同「缺失」資源。