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表單處理