共享相同的文档根目录 – 文件夹和文件除外

我有两个网站,websitea和websiteb。

我有他们都指向相同的文档根,所有工作正常,但是我希望websitea有不同的数据库细节websiteb。

数据库详细信息存储在/config/database.php中

可以在这个php文件中写一个if语句来告诉它根据主机名使用哪个数据库细节,但是我要添加另外10个这样的网站,这样会非常痛苦。

第二个问题是我有一个名为/ images /其中包含用户上传的图片的文件夹,这些再次需要不同。

当我第一次考虑这个问题的时候,我想我可以使用apaches别名 – 但是这不会与php一起工作,

<?php include('config/database.php');?> 

将不会跟随别名(不是一个Web请求,这是一个本地目录查找),因此将失败。

所以我有点卡住:)

任何人有任何想法?

只需使用符号链接来访问站点根文件夹中的所有文件和目录。

我有几个解决scheme,你可能要考虑,但他们有缺点,他们也假设你正在使用Linux或其他* nix。

你可以在这里使用的一个选项是使用unionfs 。 Unionfs基本上提供了一个结合两个文件系统的方法。 这里的缺点是unionfs在默认情况下并不适用于所有的系统。 你可能需要重新编译一个内核。

所以基本上你可以设置一些看起来像这样的东西

 /srv/www/basefolder (all the common files /srv/www/localstuff/site1.example.org (files unique to a specific site) /srv/www/localstuff/site2.example.org /srv/www/localstuff/siten.example.org /srv/www/unions/site1.example.org (unionfs ro:/srv/www/basefolder + rw:/srv/www/localstuff/site1.example.org) /srv/www/unions/site2.example.org (unionfs ro:/srv/www/basefolder + rw:/srv/www/localstuff/site2.example.org) /srv/www/unions/siten.example.org (unionfs ro:/srv/www/basefolder + rw:/srv/www/localstuff/siten.example.org) 

另一个select是简单地使用硬链接。 设置这个使用rsync很容易。 这样做的缺点是,如果你不注意,你可以为许多网站做点事情。 如果您忘记了将所有内容硬连接在一起,并且您在一个位置对文件进行了更改,则所有位置的文件都会发生更改。 每次更新文件时,您还需要重新运行rsync命令。

 /srv/www/basefolder (all the common files /srv/www/site1.example.org /srv/www/site2.example.org 

使用这样的命令来构build这个结构

 rsync -vr /srv/www/basefolder /srv/www/site1.example.org --link-dest /srv/www/basefolder rsync -vr /srv/www/basefolder /srv/www/site2.example.org --link-dest /srv/www/basefolder 

是把所有的常见内容放在一个单独的地方,并创build许多文件根据不同的configuration文件和图像文件夹和符号链接到常见的数据目录一个选项? 你甚至可以创build一个bash脚本来自动部署这个结构。

目前还不清楚使用/ images /文件夹或者你有多less个PHP脚本。

但是,可以重写php来使用config / HTTP_HOST.database.php,以便在添加虚拟主机时进行扩展。 如果php代码使用/ images或者创build到/ images的链接,它也可以被重写为使用HTTP_HOST(从Apache传入)。 如果链接来自另一个应用程序,您可以使用Apache重写规则将虚拟主机信息放入/ images /的请求中,这样您最终会看到类似/ images /的目录,但映射到磁盘上的独特内容。

有关HTTP_HOST在php中的更多信息:

http://lab.artlung.com/echo-http-host/

这个解决scheme不需要为每个用户部署复制数据,但需要更改代码,也许需要在apache中重写规则。