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規則
在這個模式下,一個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