ThinkPHP 提供靈活的 URL 路由機制,支援四種訪問模式與多種路由規則定義方式。本文系統整理 URL 大小寫設定、偽靜態後綴、路由規則陣列、正則路由與優先順序等核心配置。
| 模式 | 範例 | 特點 |
|---|---|---|
| 普通模式 | index.php?m=User&a=login | 傳統 GET 參數 |
| PATHINFO | index.php/User/login | SEO 友善、結構清晰 |
| REWRITE | /User/login | 隱藏入口檔、最美觀 |
| 相容模式 | index.php?s=/User/login | 不支援 PATHINFO 環境的備選 |
配置 'URL_MODEL' => 2(PATHINFO)為最常用設定。
<?php
return [
// 不區分大小寫
'URL_CASE_INSENSITIVE' => true,
// 偽靜態後綴限制
'URL_HTML_SUFFIX' => 'html|shtml|xml',
// 啟用路由
'URL_ROUTER_ON' => true,
// 路由規則陣列
'URL_ROUTE_RULES' => [
// 靜態路由
'login' => 'User/login',
'register' => '/User/register', // 以 / 開頭表示從網站根目錄
// 動態路由(參數自動綁定到 $_GET)
'user/:id' => 'User/profile',
'article/:year/:month/:id' => 'Article/detail',
// 參數型別限制(\d 限定數字)
'item/:id\d' => 'Item/view',
// 完全匹配($ 結尾)
'page/:name$' => 'Page/view',
// 正則路由(以 /^ 開頭 /$ 結尾)
'/^article\/(\d{4})\/(\d{2})\/(\d+)$/' => 'Article/detail?year=:1&month=:2&id=:3',
],
];
?>
'URL_ROUTE_RULES' => [
'user/:id\d$' => 'User/profile', // 最精確優先
'user/:name$' => 'User/profileName',
'user/:year/:month/:day$' => 'User/archive',
'/^user\/(\d+)$/' => 'User/profile?id=:1', // 正則最後
],
URL_ROUTER_ON 是否為 true、模組名稱大小寫、入口檔綁定模組設定。$_GET,控制器直接用 I('get.id') 取得。'URL_ROUTE_RULES' => [['user', 'User']] 即可映射 GET/POST/PUT/DELETE 至 index/save/update/delete。