在Windows / IIS上的多个CakePHP webroot之间共享资源?

时间:2010-08-12 15:41:58

标签: cakephp iis-6 windows-server-2003 cakephp-1.3

我有一个运行六个不同网站的CakePHP安装,每个网站都有自己的webroot。所有基本代码都是相同的(控制器,模型等),只需将css,images,js等分成单独的webroot(app / webroot,app / webroot_second_site,app / webroot_third_site等)< / p>

我的问题是:有没有办法在网络基础之间共享公共资源?因此,我们没有六个不同的TinyMCE副本和jQuery混乱我们的项目,更重要的是我,所以我们可以在一个常见的CSS文件中进行更改,而不必在六个不同的站点上复制/粘贴更改文件夹?

如果这些站点在Linux机器上运行,我认为使用每个webroots的符号链接到目录树中更高级别的公共文件夹可以很容易地完成,但是我们运行的是Windows Server 2003 / IIS 6.有什么建议吗?

3 个答案:

答案 0 :(得分:1)

事实证明,可以在NTFS文件系统中执行目录符号链接。或者至少足够接近实际目的。 “NTFS Junctions”可以满足您的需求。 获取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”中。

答案 1 :(得分:0)

您可以创建一个静态服务器。添加DNS条目到类似static.yoursite.com。从您的其他站点链接到这些文件 - 可能您只需修改HTML帮助程序,以便它自动创建指向其他域的链接。

这可以帮助提高性能,因为你可以运行类似nginx的东西来提供这些静态文件。它还将并行化资源检索 - 大多数浏览器将允许2个连接到给定服务器,因此静态内容与动态内容所需的那些连接资源竞争。实质上,用户将启动2个与动态内容的连接以及2个与静态资源的连接。

很好地运作IME。

答案 2 :(得分: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目录中。现在,修改每个webroots中的index.php文件以指向同一个应用程序:

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。