共享内容/代码 - 多个域,单个服务器,单个数据库

时间:2014-02-05 19:44:24

标签: php multiple-domains

这就是谜题:

我在一台Apache服务器上托管了几个单独的域。它们相似,外观和布局相似,但具有个性化的特定内容。

我编写了一个代码“框架”,它将在域之间共享,其中大部分内容实际上是从数据库中填充的。即使是具有共享内容的静态页面(关于我们,隐私声明等)也有每个站点特定的变量,例如站点名称和徽标等,其中一些变量通过特定于域的配置文件填充。

我想做的是:

  1. 拥有一个共享数据库来为站点特定内容的所有站点提供服务。数据库还将托管用户及其内容。我的主人告诉我这是可能的,这可能是最容易的部分。我正在使用PHP MySQL。我认为我会建立一个与数据库的标准远程连接。

  2. 找到共享代码框架的最佳方式。我讨厌将相同的代码复制到十几个或更多站点的想法。但是,无论必须做什么。如果我可以以某种方式共享代码,或者我可以找出一些自动上传的工具......

  3. 所以我要找的主要答案是如何共享代码库而不上传12次。如果可能的话。一种可能性似乎是FTP脚本。但这似乎过时了。似乎应该有一些优雅但安全的方式在单个服务器上的自有域之间共享代码。

    希望收获一些想法......任何接受者?

    由于

3 个答案:

答案 0 :(得分:1)

这实际上取决于您所有网站共享的相似程度。

根据您的问题,听起来它们非常相似,这意味着您可以简单地让所有网站指向相同的代码库,并使用$_SERVER[HTTP_HOST]服务作为条件,将提供相应的内容,如:

switch ($_SERVER[HTTP_HOST]) {
    case 'domain1.com':
        // do something
        break;
    case 'domain2':
        // something else
        break;
}

或者在DB中:

SELECT TextBlurb
FROM Content
WHERE page = "landing.php"
AND site = "$_SERVER[HTTP_HOST]"

答案 1 :(得分:1)

您需要拥有一个具有站点上下文的数据库。这并不难。有一个表格,每个网站都有一个条目。 ID |站点名称

然后,在用户表,文章,表,页表等中......您可以使用第一个表中的ID来指定站点上下文。这样,每个站点都可以配置一个ID,并且所有查询都会自动使用此ID,以便仅为其站点获取内容。

所以单个数据库并不难。

共享代码库也很简单。只要您通常更新代码库并确保核心代码与站点无关,您就可以轻松地将相同的框架复制到每个站点,然后使用更新轻松更新每个站点。由于核心代码与站点无关,因此您可以轻松修补框架,而无需覆盖任何特定于站点的设置/代码。

希望这有帮助。

编辑:

如果必须使用单个代码库,那么在每个请求的开头都需要一个catch来查看正在调用的域,然后相应地设置站点ID。这样,其他所有内容都将使用该站点ID来运行查询,加载样式,视图等...

但是,在网络行业工作了十多年,并专注于定制的CMS系统,我强烈建议您不要选择使用完全相同的代码用于不同网站的解决方案。

它使调试变得更加困难,并且它使代码中的错误更具潜在的灾难性。它还可以让您的系统变得轻而易举,也可以成为更大的目标,因为有人可以通过黑客攻击一个代码库来同时删除12个以上的网站。

你想做的事情可以做,但我建议你不要这样做。

答案 2 :(得分:0)

在多个域之间共享代码 - 拥有一个中心域,然后将其余域停放在该域上。

如果使用cPanel,则只有一个活动域和一个cPanel,在cPanel中可以找到停放域的功能。我之前有几个活动域,每个域都有自己的cPanel。我不得不终止WHM中的域名,并将它们停放在我的中心域名上。然后我可以使用基于读取$ _SERVER ['SERVER_NAME']的配置文件来分享底层代码,告诉我他们正在访问哪个域。