5

我正在使用 MVC 框架 (Yii) 创建一个网站,我需要动态创建子域,即http://company.website.com

因此,为了实现这一点,我添加了一个 DNS 通配符 (*.website.com)。现在的问题是我的应用程序控制器对于 www.website.com 和 company.website.com 都是一样的。例如,我有一个User带有Register动作 ( user/register) 的控制器。现在,如果我去www.website.com/user/register我可以注册,但如果我去company.website.com/user/register我可以同样的事情。这种行为对于我所有的控制器都是一样的。

我意识到一切正常,但是如何分离 www.website.com 和 compnay.website.com 的控制器?我不希望用户从 subdomian url 访问注册/登录/其他控制器和操作。

任何建议都非常感谢!

谢谢!

4

2 回答 2

4

您可以将主机名包含到您的路由规则数组中。例如,您可以创建规则

array(
    'http://www.website.com/user/register' => 'user/register',
    'http://<company:\w+>.website.com/user/register' => 'other/route',
)

并检查您的操作中的company参数。other/route请注意,http://这些规则需要这样做。有关详细信息,请参阅CUrlManager文档。

PS如果控制器完全不同http://www.website.comhttp://company.website.com/user/register最好为这些站点设置两个应用程序。

于 2010-08-03T16:09:25.570 回答
2

如果我理解您的问题,则 URL 的“公司”部分是可变公司名称。我会在这个假设下继续我的回答。

另一种选择是创建一个公司模块(我现在将其称为“公司”),并使用 CUrlManager 规则路由到该控制器。例如

array(
    'http://<company:\w+>.website.com/user/register' => '/companies/user/register',
    'http://<company:\w+>.website.com/<_c:\w+>/<_a:\w+>' => '/companies/<_c>/<_a>' // more generic option
),

'company' 字符串将作为 $_GET['company'] 传递给应用程序,您可以在 CompaniesModule.php 文件中使用此参数来加载一些公司特定数据。

请注意,如果没有其他规则来处理 www.website.com 请求(根据 Gray Teardrop 的回答),您将收到对该子域的请求错误。

于 2010-08-06T03:39:42.893 回答