CodeIgniter 路由系統允許將 URI 重新映射至任意控制器/方法,支援萬用字元與正則表達式兩種規則定義方式,本文完整說明配置細節與實務範例。
application/config/routes.php 中的 $route 陣列定義所有規則,鍵為匹配 URI,值為目標控制器/方法。
| 萬用字元 | 匹配說明 |
|---|---|
:num | 純數字段段 |
:any | 任意字元(可跨多段) |
$route['product/(:num)'] = 'catalog/product_lookup'; // product/123 → Catalog::product_lookup(123) $route['product/(:any)'] = 'catalog/product_lookup/$1/$2/$3/$4/$5'; // 將所有參數傳遞
規則依定義順序執行,越早定義優先級越高。
// 簡單重導向
$route['journals'] = 'blogs';
// /journals → Blogs controller
// 固定參數重導向
$route['blog/joe'] = 'blogs/users/34';
// /blog/joe → Blogs::users(34)
// 萬用字元
$route['product/(:any)'] = 'catalog/product_lookup';
// /product/abc → Catalog::product_lookup('abc')
// 數字參數傳遞
$route['product/(:num)'] = 'catalog/product_lookup_by_id/$1';
// /product/123 → Catalog::product_lookup_by_id(123)
$route['products/([a-z]+)/(\d+)'] = '$1/id_$2'; // /products/shirts/123 → Shirts::id_123() // 反向引用請用 $1 而非 \\1 // 可混合使用萬用字元與正則
// 預設控制器(訪問根目錄時) $route['default_controller'] = 'welcome'; // 自定義 404 覆蓋 $route['404_override'] = 'errors/error404';
default_controller:未指定控制器時的回退,未設定會噴 404404_override:控制器不存在時的處理器,不影響 show_404() 方法:any 會貪婪匹配,謹慎排序避免誤攔截善用路由系統能建立乾淨、語意化的 URL 結構,提升 SEO 與使用者體驗。