网址管理器中的Yiii2子域无法正常工作

时间:2016-05-11 05:12:30

标签: php routing yii2 url-routing yii-url-manager

我有一个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;反而采取索引行动。

1 个答案:

答案 0 :(得分:2)

原因是网址规则的顺序。

我怀疑使用http://example.comhttp://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指南。

相关问题