URL美化/路由美化及UrlManage规则解析
yii2 2017-02-06 17:19:35

参考资料:http://www.yiichina.com/doc/guide/2.0/runtime-routing 

 

Url美化

以首页链接为例:http://www.demo.com/index.php?r=site%2Findex,如何对上面链接做美化呢?看下面的教程

 

1.开启apache-rewrite,打开/frontend/config/main.php中的components下面添加以下代码

PHP Code复制内容到剪贴板
  1. 'urlManager' => [        
  2.     'enablePrettyUrl' => true,        
  3.     'showScriptName' => false,        
  4.     'rules'=>[              
  5.     ],  
  6. ],  

 

2.在/frontend/web下面添加.htaccess文件

PHP Code复制内容到剪贴板
  1. RewriteEngine on  
  2.    
  3.  ##  
  4.  # @from Yii中文网 www.yii-china.com  
  5.  # @mail xianan_huang@163.com  
  6.  # @author 上班偷偷打酱油  
  7.  ##  
  8.    
  9.  # 如果是一个目录或者文件,就访问目录或文件  
  10.  RewriteCond %{REQUEST_FILENAME} !-d  
  11.    
  12.  # 如果文件存在,就直接访问文件,不进行下面的RewriteRule  
  13.  RewriteCond %{REQUEST_FILENAME} !-f  
  14.   
  15.  RewriteRule . index.php  

 

3.如需在尾部跟上.html(伪静态)只需要在urlManager中添加

1.png

PHP Code复制内容到剪贴板
  1. 'urlManager' => [  
  2.             'enablePrettyUrl' => true,  
  3.             'showScriptName' => false,  
  4.             'suffix'=>'.html',  
  5.             'rules' => [  
  6.             ],  
  7.         ],  

 

如此,首页链接就变成:

http://www.demo.com/site/index.html

/site/about.html

/site/contact.html

/site/login.html

 


 

Url规则:

urlmanager配置为应用程序组件在[[\yii\base\Application]]。你可以通过Yii访问实例:Yii::$app->urlManager

您可以通过添加一个数组到您的应用程序配置下的“components”中,示例如下:

PHP Code复制内容到剪贴板
  1. 'urlManager' => [  
  2.      'enablePrettyUrl' => true,  
  3.      'rules' => [  
  4.          // your rules go here  
  5.      ],  
  6.      // ...  
  7.  ]  

 

rules规则举例:

PHP Code复制内容到剪贴板
  1. [  
  2.       'dashboard' => 'site/index',  
  3.    
  4.       'POST <controller:\w+>s' => '<controller>/create',  
  5.       '<controller:\w+>s' => '<controller>/index',  
  6.    
  7.       'PUT <controller:\w+>/<id:\d+>'    => '<controller>/update',  
  8.       'DELETE <controller:\w+>/<id:\d+>' => '<controller>/delete',  
  9.       '<controller:\w+>/<id:\d+>'        => '<controller>/view',  
  10. ];  

 

PHP Code复制内容到剪贴板
  1. rules' => [ 
  2.     // 为路由指定了一个别名,以 post 的复数形式来表示 post/index 路由 
  3.     'posts' => 'post/index', 
  4.  
  5.     // id 是命名参数,post/100 形式的URL,其实是 post/view&id=100 
  6.     'post/<id:\d+>' => 'post/view', 
  7.  
  8.     // controller action 和 id 以命名参数形式出现 
  9.     '<controller:(post|comment)>/<id:\d+>/<action:(create|update|delete)>'=> '<controller>/<action>', 
  10.  
  11.     // 包含了 HTTP 方法限定,仅限于DELETE方法 
  12.     'DELETE <controller:\w+>/<id:\d+>' => '<controller>/delete', 
  13.  
  14.     // 需要将 Web Server 配置成可以接收 *.digpage.com 域名的请求 
  15.     'http://<user:\w+>.digpage.com/<lang:\w+>/profile' => 'user/profile',]  

 

1、案例:

微信的授权跳转地址,不可有&之后的参数,所以要对url美化一下

PHP Code复制内容到剪贴板
  1. 'training/wxcnooc/widget-<wid:\d+>-<pid:\d+>'=>'training/wxcnooc/widget',  
  2. 'meet/wxcnooc/widget-<wid:\d+>-<pid:\d+>'=>'meet/wxcnooc/widget',  

 

原链接地址:

PHP Code复制内容到剪贴板
  1. http://xx.xx.xx.cn/training/wxcnooc/widget?wid=161&pid=190  

 

url美化后地址为:

PHP Code复制内容到剪贴板
  1. http://xx.xx.xx.cn/training/wxcnooc/widget-161-190  

 

demo:

原本的路由是:/article/tag?tagname=阳台
想要达到的效果是: /tag/阳台

1.png

 

demo:

原本的路由是:/article/product
想要的效果:/product/ 【注意点:最后有一个反斜杠,正常路由美化的时候是没有最后的反斜杠】

PS:在suffix中加一个反斜杠

3.png

 

 

demo:

原本的路由是:/article/package

想要的效果是:/package.html 【注意点:有后缀名,伪静态】

2.png

 

demo:

 

 

 

 

 

 

 

 

本文来自于:http://www.yoyo88.cn/study/yii2/73.html

Powered by yoyo苏ICP备15045725号