我有一个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而没有提到它不起作用时它会调用网站控制器&#39;反而采取索引行动。
答案 0 :(得分:2)
原因是网址规则的顺序。
我怀疑使用http://example.com或http://bla.example.com之类的其他网址或/
规则是什么来调用应用程序?
看起来/
对于没有路径组件的任何URL都足够了,因此不会评估第二个规则。您可以预先添加协议和域路径,如'http://example.com/' => 'site/index'
(因此显式声明其他(可疑)域,如果调用http://co.example.com则此规则不匹配)或只删除此规则(如果<不应该调用em> site / index 。
请注意,如果没有规则匹配,将使用应用程序的defaultRoute。
来自Yii2 Guide:
...要解析传入的请求,URL管理器会检查规则 声明它们的顺序并查找匹配的第一个规则 请求的网址。
[...]
在解析或创建URL时,URL管理器会检查URL中的URL规则 命令他们被宣布。因此,您可以考虑调整 URL规则的顺序使得更具体和/或更常用 规则放在较少使用的规则之前。
另见关于Rules with Server Names的Yii2指南。