1、Yii Url美化,配置urlManager组件php
'urlManager' => [ 'enablePrettyUrl' => true, // 开启URL美化,能够去掉 index.php?r=
'showScriptName' => false, // 若是设置为 true,会显示 index.php
'suffix' => '.html', // 实现伪静态
'rules' => [ // 在 rules 中设置自定义规则
'<controller:\w+>/<id:\d+>' => '<controller>/detail',
'<controller:\w+>/<id:\d+>/<action:(create|update|delete)>' => '<controller>/<action>', // 在控制器和动做之间是 id 的值
'<controller:(post|comment)>s' => '<controller>/index', // 右边post和comment index 的动做 均可以用左边控制器ID加上 s 来代替
'posts' => 'post/index', // 若是访问 post/index 显示为 posts.html
], ],
'<controller:\w+>/'<id:\d+> => '<controller>/detail' 详解:
当url出现由若干字符 + / + 若干个数字来组成字符串的时候,urlManager 就会来判断这个字符串是否匹配规则左边的正则表达式,若是能匹配的话,这个字符串就会被转换成为规则右边的这种样式,在 controller后面跟上 /detail这个字符串,
而后把规则左边的 id 已经若干的数字以参数的形式跟在动做的后面。
转换详情:
例如:www.example.com/post/42.html 在规则 suffix => .html的做用下转换为:
www.example.com/post/42 在规则'<controller:\w+>/'<id:\d+> => '<controller>/detail'的做用下转换为:
www.example.com/post/detail?id=42 在规则 'enablePrettyUrl' => true的做用下转换为:
www.example.com/index.php?r=post/detail?id=42
最后这个 url 就是完整路径
2、createUrl()方法
一、UrlManager 组件的createUrl方法能够建立各类类型的url连接
二、能够把路由和要传递的参数做为 createUrl 方法的参数进行建立
三、可以自动转换为符合URL美化规则的连接
使用示例:html
// url格式为:index.php?r=site%2Findex¶m1=value1¶m2=value2 Yii::$app->urlManager->createUrl(['site/index','param1'=>'value1','param2'=>'value2']); // url格式为:index.php?r=site%2Findex¶m1=value1#name Yii::$app->urlManager->createUrl(['site/index','param1'=>'value1','#'=>'name']); 路由 参数 锚点
记住,代码中,必定要注意尽可能不要使用硬编码web
3、url助手类
一、yii\helpers\Url::to()来建立各类类型的url连接
二、能够把路由和要传递的参数做为url助手类方法的参数来进行建立正则表达式
// index.php?r=post%2Findex
echo Url::to(['post/index']); // index.php?r=post%2Fview&id=100
echo Url::to(['post/view','id'=>100]); // index.php?r=post%2Fview&id=100#content
echo Url::to(['post/view','id'=>100,'#'=>'content']); // index.php?r=post%2Findex
echo Url::to(['post/index'],true); // 建立一个硬连接 // https//:www.example.com/index.php?r=post%2Findex
echo Url::to(['post/index'],'https'); // 建立含有https的url
4、虚拟主机URL美化
在项目根目录新建一个 .htacces 的文件
将重写规则写入 .htacces 文件
例如写入下面这一段:app
# use mod_rewrite for pretty URL support
RewriteEngine on # If a directory or a file exists, use the request directly
RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d # Otherwise forward the request to index.php
RewriteRule . index.php # use index.php as index file
DirectoryIndex index.php # ...other settings... # Apache 2.4
Require all granted ## Apache 2.2 # Order allow,deny # Allow from all
httpd.conf须要改成以下:frontend
<VirtualHost *:80> ServerName frontend.test // 设置虚拟主机名
DocumentRoot "/path/to/yii-application/frontend/web/" // 虚拟主机的web根目录
<Directory "/path/to/yii-application/frontend/web/"> AllowOverride All //容许 .htacces 文件覆盖重写规则
</Directory>
</VirtualHost>
这种状况是在 虚拟主机不准给咱们修改的时候使用,可是Apache服务的配置必须能被覆盖才行。