2010-08-12 123 views
0

我有一個CakePHP安裝,運行六個不同的網站,每個網站都有自己的webroot。所有的基本代碼是相同的(控制器,模型等),只是將CSS,圖像,js等分成獨立的webroot(app/webroot,app/webroot_second_site,app/webroot_third_site等)在Windows/IIS上的多個CakePHP webroot之間共享資源?

我的問題是:有沒有一種方法可以在webroots之間共享公共資源?因此,我們沒有六個不同的TinyMCE和jQuery副本,讓我們的項目更加混亂,對我更重要的是,我們可以對通用CSS文件進行更改,而不必在六個不同站點上覆制/粘貼更改。文件夾?

如果這些站點運行在Linux機器上,我認爲它可以相當容易地通過從每個webroot到目錄樹中較高級別的公共文件夾的符號鏈接來完成,但我們正在運行Windows Server 2003/IIS 6.有什麼建議?

回答

1

變成你可以在NTFS文件系統中做目錄符號鏈接。或者至少在實踐中足夠接近。 「NTFS連接」將爲你想要的工作。 抓住一個簡單的命令行程序Sysinternals「Junction」程序來創建/刪除這些路口。 然後,您可以將所需的任何常用目錄鏈接到單個主目錄。 舉例來說,如果你有

webroot1/ webroot2/ webroot3/

每個都有自己的 「JS /」 目錄下,那麼你可以創建

webroot_common/JS/

和然後符號鏈接...呃,「創建路口」,像這樣的新目錄:

junction webroot1/js/common webroot_common/js 
junction webroot2/js/common webroot_common/js 
junction webroot3/js/common webroot_common/js 

(是的,「連接」程序從Linux向後輸入「ln -s」) 然後,您可以將常用文件夾中需要的任何常用js文件(如jQuery)放入該文件夾中,並將任何站點特定的js文件保留「webrootX/JS」。

0

您可以製作一個靜態服務器。添加一個DNS條目到類似static.yoursite.com。鏈接到其他網站的這些文件 - 可能只需修改HTML幫助程序,以便它會自動創建指向其他域的鏈接。

這可以幫助提高性能,因爲您可以運行類似nginx的服務來提供這些靜態文件。它也將並行化資源檢索 - 大多數瀏覽器將允許2個連接到給定的服務器,所以靜態東西與動態東西所需的連接資源競爭。本質上,用戶將開始2個連接到您的動態的東西,以及2個連接到靜態資源。

工作得很好IME。

0

這將工作。您將需要重新定義Windows服務器的目錄,但您會理解它。

首先,將您的APP和CAKE目錄放在public_html的上方。

/var/www/app 
/var/www/cake 

確保該文件夾餅所有的蛋糕夾在它(蛋糕,銷售商等) 指向您的網站他們的public_html目錄。

/var/www/html/site1 
/var/www/html/site2 

webroot內容將位於每個public_html目錄中。現在,修改index.php文件中的每個webroots的指向相同的應用程序:

if (!defined('ROOT')) { 
    define('ROOT', DS.'var'.DS.'www'.DS.'app'); 
} 

if (!defined('APP_DIR')) { 
    define('APP_DIR',dirname('app')); 
} 

if (!defined('CAKE_CORE_INCLUDE_PATH')) { 
    define('CAKE_CORE_INCLUDE_PATH', DS.'var'.DS.'www'.DS.'cake'); 
} 

確保重寫已開啓,當然。然後它將運行相同的代碼,但使用index.php所在的webroot。

+0

柯蒂斯,這個解決方案是否適合你? – 2010-08-16 17:40:29