【发布时间】:2014-03-25 15:30:55
【问题描述】:
我认为我的情况很奇怪/复杂,但我认为我忽略了一些简单的事情。我们正在设置一个 Yii 应用程序,它将托管其他人设置的“皮肤”。它基本上是一个大社区,但在许多不同的站点上。一切都将由一个单一的公共核心 Yii 应用程序处理。
我们的计划是允许两种不同的 URL 配置,具体取决于皮肤所有者想要做什么:
1)whatever.theirsite.com(设置为 portal.oursite.com 的 CNAME - 供高级用户使用)
2) portal.oursite.com/theircommunity - 对于那些只希望它在没有其他配置的情况下工作的人
在第一种情况下,很容易挑选出 SERVER_NAME 变量,在数据库中查找正确的主题,并提供正确的主题/社区。我过去实际上已经这样做了,而且效果很好。但是,我对第二种情况有点迷茫。我仍然可以进行 db 查找以从 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 管理器以添加新的路由规则,具体取决于请求的社区.
例如:
在应用程序运行之前,进行数据库查找以确定我们使用的主题 正在使用。
如果主题使用虚拟根目录,则复制所有现有的 url 管理器规则,但将它们的communityname/ 附加到它们的前面。
【问题讨论】:
标签: php apache yii document-root