我正面临一种情况,我想得到一些关于最佳方法的反馈/指导。
我有一个用PHP和CodeIgniter开发的大项目,作为SaaS解决方案工作了一年多,它运行得很好。大约两个月前,一位新客户问我,他是否可以使用我的软件,但有一些专门为他开发的新功能。我答应了,并创建了一个子域,其中包含我主要项目的基本结构以及他要求的新开发。
现在,其他客户也问我同样的问题,每当我在主项目中发现错误时,我都必须转到两个子域项目并进行修复。如果错误涉及多个文件。。这花了我太多时间,可能会造成一些错误。
所以,我想问的是,在为特定客户创建子域时,是否有比从主项目中复制所有文件更好的解决方案?
我想了想:
- 仅在主项目的正确文件结构的子域中创建具有新功能的新文件/固定文件
- 不知怎的用.htaccess"重定向"到子域中的文件(如果存在的话(
这可能吗?如果是,如何?
这是可能的。。。但定义的方式不止一种。
一种选择是使用类似VCS的GIT,如果它影响核心模块,则将更改推送到主分支,然后将提交合并到所有其他特殊分支中。但这仍然涉及到服务器上不同位置的相同文件。
你也可以考虑重构你的项目,构建一个核心模块,用于每个项目,并实现某种模块系统,这样自定义模块就可以尽可能地插入。然后,您可以从一个中心位置导入核心模块,并且只有针对每个客户的特定修改位于不同的位置。
但其中一个解决方案的决策在很大程度上取决于您的项目结构以及客户的自定义部分如何影响其他模块和功能。
如果我理解正确,您需要1个源代码,但在2个不同的域中输出。这是我用Codeigniter完成的,它依赖于htaccess的一个小特性,即您可以使用htaccess设置PHP环境变量。这很有用,因为在Codeigniter中,您可以根据变量是否存在来更改不同视图或配置文件的路径。
您将需要单独的视图、配置、语言包和路由,但这绝对是可能的。例如,在您的htaccess中:
SetEnv SITE_NAME "test.co.uk"
然后您需要设置不同的元素:
- 在index.php(每个版本可能有所不同(中,根据
SITE_NAME
变量切换URL - 在index.php中,更改视图文件夹(到您的版本特定视图(
- 根据此处的手册,使用环境设置更改配置变量:https://www.codeigniter.com/userguide3/libraries/config.html
这将允许您运行一组代码,但有两个前端。