Yii URL简化、美化 [ 1.0 版本 ]
Yii 框架的访问地址若不简化会让人觉得很繁琐,未简化的地址一般格式如下:
http://localhost:80/test/index.php?r=xxx/xxx/xxx
若是带有参数会更复杂:
http://localhost:80/test/index.php?r=xxx/xxx/xxx¶m1=XXX¶m2=XXX
那么我们通过什么方法把它美化下呢:
1.在config文件夹下的main.php文件内,找到urlManager的配置,修改为如下:
'urlManager'=>array(
'urlFormat'=>'path',
'rules'=>array(
'<controller:\w+>/<id:\d+>'=>'<controller>/view',
'<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
'<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
'<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
),
),
),
现在再来访问你的项目,你就会发现你的项目URL变成了:
http://localhost:80/test/index.php/XXX/XXX
2.这和不够,我们想继续简化,把index.php也去掉。继续修改main.php文件,
'urlManager'=>array(
'urlFormat'=>'path',
'showScriptName'=>false, //去除index.php
//'urlSuffix'=>'.html', //加上.html
'rules'=>array(
'<controller:\w+>/<id:\d+>'=>'<controller>/view',
'<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
'<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
'<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
),
),
这么修改之后,index.php不见了,但是会发现,部分URL出错了。怎么解决呢?
3.添加 .htaccess文件,用于项目的访问。内容如下:
<IfModule mod_rewrite.c>
Options +FollowSymLinks
IndexIgnore */*
RewriteEngine on
# if a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# otherwise forward it to index.php
RewriteRule . index.php
</IfModule>
这样进入项目就会自动访问index.php文件,url就不会错乱了。
最后简化后的URL如下:
http://localhost:80/test/XXX/XXX
jason_king
注册时间:2015-07-27
最后登录:2018-01-15
在线时长:2小时30分
最后登录:2018-01-15
在线时长:2小时30分
- 粉丝5
- 金钱140
- 威望60
- 积分760
共 7 条评论
basic下面没有main怎么设置呢?
应该可以借鉴到Yii2
mark 留着以后用
想要简化参数也为路径模式,那要针对不同的控制器和方法和参数名都要配置相应的rule,是不是太多而且不太好维护啊
真心不想骂楼主,写了一些,但是呢,又误导大家,好了,如果遇到某个错误,可以查看:http://stackoverflow.com/questions/26009697/getting-error-invalid-call-yii-base-invalidcallexception-when-customizing-urlm
在yii_basic中,需要将urlManager放置于components中:
'components' => [
'urlManager' => [ //'class' => 'yii\web\UrlManager', 'enablePrettyUrl' => true, 'showScriptName' => false, 'rules'=>[ ], ],
],
以后看看用不用得着
为啥从来没人解释过rules的具体参数含义?