在多个子域中维护相同的项目

时间:2018-07-15 14:40:57

标签: php .htaccess codeigniter subdomain

我正面临一种情况,我想对最佳方法有一些反馈/指导。

我有一个大型项目,使用PHP和CodeIgniter作为SaaS解决方案开发了一年多,并且运行良好。大约两个月前,一个新客户问我是否可以使用我的软件,但有专门为他开发的一些新功能。我说可以,并创建了一个子域,其中包含我的主项目的基本结构以及他要求的新开发成果。

发生的事情是,现在其他客户也问我同样的问题,每当我在主项目中发现错误时,我都必须同时进入两个子域项目并进行修复。如果该错误涉及多个文件,这将花费我太多时间,并且可能会导致一些错误。

因此,我要问的是,为特定客户端创建子域时,是否有比主项目中的全部复制文件更好的解决方案?

我想到了这个

  1. 仅在具有主项目正确文件结构的子域中创建新文件/具有新功能的固定文件。
  2. 通过.htaccess以某种方式“重定向”到子域中的文件(如果存在)吗?

这可能吗?如果可以,怎么办?

2 个答案:

答案 0 :(得分:0)

这是可能的...但是在不止一种方式上具有权威性。

一种选择是使用GIT之类的VCS,并将更改推送到主分支(如果它影响核心模块),然后将提交合并到所有其他特殊分支中。但这仍然涉及服务器上不同位置的相同文件。

您还可以考虑重构项目并构建一个核心模块,该模块将在每个项目中使用并实现某种模块系统,以使自定义模块尽可能可插入。然后,您可以从一个中央位置导入核心模块,而只有每个客户的特定修改位于不同的位置。

但是,其中一种解决方案的决定很大程度上取决于您的项目结构以及客户的自定义部分如何影响其他模块和功能。

答案 1 :(得分:0)

如果我对您的理解正确,则需要1个源代码,但要在2个不同的域中输出。这是我对Codeigniter所做的事情,它依赖于htaccess的一个小功能,您可以使用htaccess设置PHP环境变量。这很有用,因为在Codeigniter中,您可以根据变量是否存在来更改到不同视图或配置文件的路径。

您将需要单独的视图,配置,语言包和路由,但这绝对是可能的。例如,在您的htaccess中:

SetEnv SITE_NAME "test.co.uk"

然后,您需要设置不同的元素:

  1. 在index.php(每个版本可能有所不同)中,根据SITE_NAME变量切换URL
  2. 在index.php中,将视图文件夹更改为特定于您的版本的视图
  3. 按照此处的手册,使用“环境”设置更改配置变量:https://www.codeigniter.com/userguide3/libraries/config.html

这将允许您运行一组代码,但具有2个前端。