如何使用共享代码库布局多站点应用程序

How to layout a multisite application with shared codebase

4 个网站共享相同的代码库,每个网站都有一个唯一的域。某些功能可能因域而异,同样适用于 CSS、Javascript 和图像文件。

现在获取 php 中请求的信息的首选方式是什么?谁能指出下面的 advantages/disadvantages 个建议,或者提出更好的建议?

解决方案1:将所有4个域指向同一个index.php,然后通过$_SERVER['SERVER_NAME']

获取域

解决方案 2 与 1. 一样,一个 index.php 用于所有域,但通过 mod_rewrite:

将域作为查询参数传递

RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{HTTP_HOST} ^(.*) [NC] RewriteRule ^ index.php?site=%1 [QSA,L]

解决方案 3:将 4 个域指向 4 个不同的索引 php,可能在 4 个不同的 public 文件夹中,并在上面定义域这些 index.php 个文件。

这可能听起来微不足道或者似乎无关紧要,但我想确保选择最佳解决方案。

我们之前已经这样做过,使用我们为构建网站构建的框架,该框架支持对 N 个站点使用相同的已安装代码库。我们这样做:

  • 让所有域都指向同一个文件中的同一个 index.php 文件 DocumentRoot.
  • 使用.htaccess让所有页面的所有请求都指向index.php 并重写规则。

然后 index.php 文件设置环境。我们有一个数据库 table,它以一对多的关系将 $_SERVER['SERVER_NAME'] 的结果链接到所请求的站点。这样,对 example.comwww.example.com 的请求可以引用单个站点,但 example2.com 可以引用不同的站点。一旦 index.php 文件确定了正在访问的站点和页面,它就会从数据库中获取该请求的相关信息,然后创建一个名为 $site[] 的关联数组,该数组存储所发出请求的所有信息。然后使用此数组确定要读入的资产,例如 CRM 中的特定模板,以及要读入的资产是针对该特定站点和页面的(例如 CSS、JS 等)。