0

我安装了一个运行六个不同网站的 CakePHP,每个网站都有自己的 webroot。所有基本代码都是相同的(控制器、模型等),只是 css、图像、js 等被拆分为单独的 webroot(app/webroot、app/webroot_second_site、app/webroot_third_site 等)

我的问题是:有没有办法在 webroot 之间共享公共资源?所以我们没有六个不同的 TinyMCE 和 jQuery 副本让我们的项目变得混乱,对我来说更重要的是,这样我们就可以在一个通用的 CSS 文件中进行更改,而不必在六个不同的站点之间复制/粘贴更改。文件夹?

如果这些站点在 Linux 机器上运行,我认为可以通过从每个 webroot 到目录树中更高的公共文件夹的符号链接轻松完成,但我们正在运行 Windows Server 2003 / IIS 6。任何建议?

4

3 回答 3

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

(是的,“junction”程序从Linux“ln -s”中反向获取输入)然后您可以将所需的任何常用js文件(如jQuery)放在该常用文件夹中,并将任何特定于站点的js文件留在“webrootX”中/js”。

于 2010-08-17T04:47:11.300 回答
0

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

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

工作得很好输入法。

于 2010-08-12T18:07:41.000 回答
0

这将起作用。您将需要重新定义 Windows 服务器的目录,但您会很好地理解它。

首先,将您的 APP 和 CAKE 目录放在 public_html 之上。

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

确保文件夹 cake 中包含所有的 cake 文件夹(cake、vendors 等)。将您的站点指向它们的 public_html 目录。

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

webroot 内容将位于每个 public_html 目录中。现在,修改index.php每个 webroot 中的文件以指向同一个应用程序:

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。

于 2010-08-13T22:36:42.607 回答