许多社区站点的虚拟文档根

时间:2014-03-25 15:30:56

标签: php apache yii document-root

我认为我有一个奇怪/复杂的情况,但我想我忽略了一些简单的事情。我们正在建立一个Yii应用程序,将托管其他“皮肤”人员设置。它基本上是一个大社区,但在许多不同的网站上。一切都将由一个共同的核心Yii应用程序处理。

我们的计划是允许两种不同的URL配置,具体取决于皮肤拥有者想要做的事情:

1)whatever.theirsite.com(对于高级用户设置为portal.oursite.com的CNAME)

2)portal.oursite.com/theircommunity - 适合那些只想让它无需其他配置工作的人

在第一种情况下,选择SERVER_NAME变量很容易,在数据库中查找正确的主题,并提供正确的主题/社区。我实际上已经在过去做过这个并且它工作正常。但是,我在第二种情况下有点迷失。我仍然可以进行数据库查找以找出从portal.oursite.com/theircommunity提供的主题,但所有路由都搞砸了,因为他们的社区不是控制器。它更像是一个虚拟目录,但它的动态。我觉得我错过了一个简单的htaccess或者可能是UrlManager规则。

有效示例网址为:

http://whatever.theirsite.com/mycontroller/myaction
http://portal.oursite.com/theircommunity/mycontroller/myaction

或模块:

http://whatever.theirsite.com/mymodule/mycontroller/myaction
http://portal.oursite.com/theircommunity/mymodule/mycontroller/myaction

在所有情况下,两对请求都需要转到同一个地方。后端处理确保它们看起来不同但由相同的代码处理。

有什么建议吗?

编辑: 我想到但尚未测试的一个解决方案(不确定它是否是一个好主意,或者它是否会起作用)将扩展URL管理器以添加新的路由规则,具体取决于要求哪个社区

例如:

  • 在应用程序运行之前,执行数据库查找以确定我们的主题 正在使用。

  • 如果主题使用虚拟根,则复制所有现有的网址管理器规则,但将其社区名称/附加到它们的前面。

4 个答案:

答案 0 :(得分:0)

有趣的问题!我可能会离开这里。但这样的工作会起作用吗?

/portal.oursite.com
  /theircommunity1/index.php
  /theircommunity2/index.php

单词:创建webroot的特定于用户的子目录。

这意味着用户1将拥有/theircommunity1/index.php条目脚本。用户2将拥有/theircommunity2/index.php。在入门脚本中你可以

  1. 设置用户特定变量
  2. 包含' secondary'可能在webroot之外的入口脚本。

答案 1 :(得分:0)

是的,我认为您的编辑/网址管理器设置可能是您的最佳选择。

对于它的价值,这些路由规则看起来与模块路由规则类似,因此您可以假装使用应用程序行为加载具有适当名称的模块。去年我为客户做过类似的事情。它有效,但很复杂。我建议你开始习惯在这个系统上编写单元测试,你会希望他们确保你以后不会破坏它们: - )

答案 2 :(得分:0)

我不确定我是否理解你的情景。您可以扩展UrlManager并根据站点查找创建一些变量。例如$ _GET ['site'] ='他们的社区';您可以稍后在您的应用程序上检查此变量。

答案 3 :(得分:0)

这实际上最终得到了一个简单的解决方案,但我花了一段时间才找到它。这只是扩展CHttpRequest并在init()中为请求设置baseUrl属性的问题。

if (Yii::app()->domainManager->isPortalDomain) {
   // need to set the document root correctly
   Yii::app()->request->baseUrl = '/' . Yii::app()->domainManager->domain->name;
}

当我这样做时,所有路由都正常工作,网址也正确创建。