第九区

一个程序员的经验笔记

yii2的urlManager配置

| 暂无评论

网址伪静态是一个非常常用的网站需求,Yii2可以非常简单地进行配置。

首先,在配置文件config/main.php的’components’ 段中,加入如下设置:

'urlManager'=>array(  
             'enablePrettyUrl' => true,  //对url进行美化 
             'showScriptName' => false,//隐藏index.php   
             'suffix' => '.html',//后缀
             'enableStrictParsing'=>FALSE,//不要求网址严格匹配,则不需要输入rules
             'rules' => []//网址匹配规则
),

然后,启用服务器的rewrite规则,比如apache服务器里,在网站根目录web文件夹里新建.htaccess文件,输入如下内容:

RewriteEngine on

RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1

注意这个文件仅对apache有效,并且apache必须启用rewrite模块。

这样,网址就自动优化了。

urlManager有以下可用参数:

[table id=1 /]

YII2的rules配置相对其它框架已经算简单了,但真要熟练应用也需要多多练手,或是啃一下yii/web/UrlRule类库的。一般来说,我们用到以下这几条就足够了:

'rules' => [
    // 为路由指定一个别名简化网址
    'reg' => 'user/register',

    // 加id参数,这里用到了一点点正则,\d+在正则中表示至少一位的纯数字
    'article/<id:\d+>' => 'article/view',
    //标准的控制器/方法显示
    '<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
    //加id参数
    '<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',

    // controller和action进行严格限制
    '<controller:(post|comment)>/<id:\d+>/<action:(create|update|delete)>'
        => '<controller>/<action>',

    // 包含了 HTTP 方法限定,用于restful风格的Web Server
    'DELETE <controller:\w+>/<id:\d+>' => '<controller>/delete',

    // 配置Web Server ,接收 *.cn09.com 域名的请求
    'http://<user:\w+>.cn09.com/<lang:\w+>/profile' => 'user/profile',
]

根据以上规则,如果有什么特殊需求,应该多少也能猜到。如果需要完全理解路由规则,可以阅读一下yii/web/UrlRule源码,如果有特殊需求,也可以根据源码新建一个自己规则类来进行处理。

发表评论

*为必填字段!