Yii URL規則

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,會看到關於頁面如下。

Yii

在這個模式下,一個URL規則可以與查詢參數相關聯-

ParamName:RegExp, 這裏 −

  • ParamName −參數名稱

  • RegExp − 可選的正則表達式用於匹配參數值

假設,我們已經聲明如下URL規則 -

[
'articles/year:\\d{4}/' => '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