url管理器中的Yiii2子域不工作


Yiii2 subdomain in url manager not working

我有一个Yii2高级项目。我在前端控制器中有MyCompanyController.php,我想给这个控制器添加一个子域,所以我这样做了:

    'urlManager' => [
        'rules' => [
            '/' => 'site/index',
            'http://co.example.com' => 'my-company/index', // Not work :-(
            'http://co.example.com/<action>' => 'my-company/<action>',
             ...
        ]
     ]

现在这个代码运行得很好,当我打开http://co.example.com/index我的索引操作被渲染,但当我打开时http://co.example.com在不提及该操作的情况下,它不起作用,而是调用站点控制器的索引操作。

原因是url规则的顺序。

我怀疑该应用程序是用另一个URL调用的,比如http://example.com或http://bla.example.com或者/规则的作用是什么?

似乎/对于任何没有路径组件的URL来说都足够了,所以第二条规则不会被计算。您可以像'http://example.com/' => 'site/index'一样预先设置协议和域路径(因此另一个(可疑)域被显式声明,并且如果http://co.example.com被调用)或删除此规则(如果根本不应该调用site/index)。

请注意,如果没有规则匹配,则将使用应用程序的defaultRoute。

来自Yii2指南:

为了解析传入的请求,URL管理器检查中的规则声明它们并查找匹配的第一个规则的顺序请求的URL。

[…]

解析或创建URL时,URL管理器会检查命令他们被宣布。因此,您可以考虑调整URL规则的顺序,以便更具体和/或更常用规则放在较少使用的规则之前。

另请参阅Yii2关于服务器名称规则的指南。