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 my index action gets rendered, But when I open http://co.example.com 时没有提及它不起作用,而是调用站点控制器的索引操作。

原因是 url 规则的顺序。

我怀疑该应用程序是通过另一个 URL(例如 http://example.com or http://bla.example.com)调用的,或者 / 规则的用途是什么?

似乎 / 对于任何没有路径组件的 URL 就足够了,所以第二条规则不会被评估。您可以像 'http://example.com/' => 'site/index' 一样添加协议和域路径(这样另一个(可疑的)域被显式声明并且如果调用 http://co.example.com 则此规则将不匹配)或者只是删除此规则(如果 site/index 根本不应该被调用)。

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

来自Yii2 Guide

... to parse an incoming request, the URL manager examines the rules in the order they are declared and looks for the first rule that matches the requested URL.

[...]

When parsing or creating URLs, URL manager examines URL rules in the order they are declared. Therefore, you may consider adjusting the order of the URL rules so that more specific and/or more commonly used rules are placed before less used ones.

另见关于 Rules with Server Names 的 Yii2 指南。