Yii 一行代码实现为模块绑定子域名

汉王 Yii 2016年01月10日 收藏

XML/HTML代码

    'http://<_m:\w+>.xxx.com<_q:.*>/*'=>'<_m><_q>',

 规则写在main.php中的组件配置数组里面:

    'urlManager'=>array(  
        'urlFormat'=>'path',  
        'showScriptName' => false,  
        'rules’=>array(  
            'http://<_m:\w+>.xxx.com<_q:.*>/*'=>'<_m><_q>',  
        )  
    ),

如果仅仅是一个模块(假设是user)需要绑定子域名,可以这样写规则:

XML/HTML代码

    'http://user.xxx.com<_q:.*>/*'=>'user<_q>',

如果是若干模块需要绑定子域名,可以这样写:

XML/HTML代码

'http://<_m:(user|admin|photo)>.xxx.com<_q:.*>/*'=>'<_m><_q>',

在使用的时候我注意到,如果是www开头的网址也会被转向到www模块,那么你可以使用(A|B|C)这样的规则选择要启用的模块,或者使用正则来滤掉www。

另外在路由规则里面,如果某一条匹配,则不会向下进行匹配。这是需要注意的,但是正是这样,路由才更高效,更灵活

实例:

YII模块实现绑定二级域名主要有如下步骤:

首先在配置文件设置:

'urlManager' => array(
'urlFormat' => 'path',
'showScriptName' => false, //注意false不要用引号括上
'urlSuffix' => '.html',
'rules' => array(
'http://test.shouce.ren'=>array('/blog', 'urlSuffix'=>”, 'caseSensitive'=>false),
),

blog 为一个模块 ,如果在blog模块下还存在第二个控制器(这里以comment为例),则需要多写一个规则,如下

'urlManager' => array(
'urlFormat' => 'path',
'showScriptName' => false, //注意false不要用引号括上
'urlSuffix' => '.html',
'rules' => array(
'http://test.shouce.ren'=>array('/blog', 'urlSuffix'=>”, 'caseSensitive'=>false),
'http://test.shouce.ren/comment-<id:\w+>'=>array('/blog/comment/', 'urlSuffix'=>'.html', 'caseSensitive'=>false),
),

如要访问blog下的某一条评论的URL会是:http://test.shouce.ren/comment-1.html

本在地服务器的情况:

一、在YII配置中设置了还不够的,还需要在DNS服务器中把test.shouce.ren二级域名解析到程序服务器,可以在hosts中的最后加入

127.0.0.1    www.shouce.ren   test.shouce.ren

二、还需要在apache服务器的http.conf中添加:

NameVirtualHost *:80
<VirtualHost *:80>
ServerAdmin kane@shouce.ren
DocumentRoot E:/wamp/www/k1029
ServerName test.shouce.ren
ErrorLog logs/test.shouce.ren-error_log
CustomLog logs/test.shouce.ren-access_log common
</VirtualHost>

如果需要绑定多个二级域名,则只要重复添加即可.