URL规则是 yii\web\UrlRule 的一个实例。当启用prettyURL格式,urlManager组件使用其规则属性声明URL规则。
要解析请求,URL管理器取得它们的声明,并按顺序查找第一个规则。
第1步- 修改 config/web.php 文件中的urlManager 组件。
'urlManager' => [ 'showScriptName' => false, 'enablePrettyUrl' => true, 'rules' => [ 'about' => 'site/about', ] ],
第2步 - 打开Web浏览器访问:http://localhost:8080/about,会看到关于页面如下。

在这个模式下,一个URL规则可以与查询参数相关联-
<ParamName:RegExp>, 这里 −
-
ParamName −参数名称
-
RegExp − 可选的正则表达式用于匹配参数值
假设,我们已经声明如下URL规则 -
[ 'articles/<year:\d{4}>/<category>' => 'article/index', 'articles' => 'article/index', 'article/<id:\d+>' => 'article/view', ]
当规则用于解析 -
- /index.php/articles 被解析成 article/index
- /index.php/articles/2014/php 被解析成 article/index
- /index.php/article/100 被解析成 article/view
- /index.php/articles/php 被解析成 articles/php
当规则被用于创建的URL -
-
Url::to(['article/index']) 创建成 /index.php/articles
-
Url::to(['article/index', 'year' => 2016, 'category' => 'php']) 创建成 /index.php/articles/2016/php
-
Url::to(['article/view', 'id' => 100]) 创建成/index.php/article/100
-
Url::to(['article/view', 'id' => 100, 'source' => 'ad']) 创建成/index.php/article/100?source=ad
-
Url::to(['article/index', 'category' => 'php']) 创建成 /index.php/article/index?category=php
在urlManager的使用上,用得最多的配置项就是:
- $enablePrettyUrl ,是否开启URL美化功能。关于美化功能,我们在 路由(Route) 部分已经介绍过了。 注意如果 $enablePrettyUrl 不开启,表明使用原始的格式,那么所有路由规则都是无效的。
- $showScriptName ,是否在URL中显示入口脚本。是对美化功能的进一步补充。
- suffix 设置一个 .html 之类的假后缀,是对美化功能的进一步补充。
- rules 保存路由规则们的声明,注意并非保存其实例。
- $enableStrictParsing 是否开启严格解析。该选项仅在开启美化功能后生效。在开启严格解析模式时, 所有请求必须匹配 $rules[] 所声明的至少一个路由规则。 如果未开启,请求的PATH_INFO部分将作为所请求的路由进行后续处理。
在 UrlManager::init() 初始化过程中,可以发现 urlManager 使用了应用所提供的缓存组件(有果有的话), 对所有路由规则的实例进行缓存。
yii\web\UrlManager::$suffix
第3步 - 在 config/web.php 文件修改 urlComponent 组件配置。
'urlManager' => [ 'showScriptName' => false, 'enablePrettyUrl' => true, 'enableStrictParsing' => true, 'suffix' => '.html' ],
第4步- 在Web浏览器地址栏键入URL地址访问:http://localhost:8080/site/contact.html 查看结果,注意这里后缀是:.html
上一篇:
Yii URL路由
下一篇:
Yii HTML表单处理