ThinkPHP 提供 4 種 URL 訪問模式,滿足從開發調試到生產上線的不同需求。本文系統梳理各模式結構差異、配置方法、優缺點對比,助你選擇最適合項目的路由策略。
Lib/Model/ - 數據操作Tpl/ - 頁面展示Lib/Action/ - 業務邏輯控制| 模式 | URL 結構示例 | 特點 | 適用場景 | SEO 友好度 |
|---|---|---|---|---|
| 1. 普通/GET 模式 | ?m=User&a=login&id=1 | 傳統參數傳遞,兼容性最好 | 開發調試、API 接口、舊系統兼容 | ⭐☆☆☆☆ |
| 2. PATHINFO 模式 | /User/login/id/1 | 路徑式參數,語義清晰,框架默認推薦 | 大多數 Web 應用、RESTful 風格 | ⭐⭐⭐⭐☆ |
| 3. REWRITE 模式 | /User/login/id/1 (隱藏 index.php) | 最美觀,無入口文件,需 Web 服務器配合 | 生產環境、對 SEO 有要求的項目 | ⭐⭐⭐⭐⭐ |
| 4. 兼容模式 | ?s=/User/login/id/1 | 不支援 PATHINFO 的服務器降級方案 | 不支援 PATHINFO 的虛擬主機/舊環境 | ⭐⭐☆☆☆ |
https://domain.com / project / index.php / Module / Action / key1 / val1 / key2 / val2
│ │ │ │ │ │ │ │
域名 項目目錄 入口文件 模塊名 方法名 參數鍵 參數值 參數鍵 參數值
<?php
return [
// URL 模式選擇: 0=普通, 1=PATHINFO, 2=REWRITE, 3=兼容
'URL_MODEL' => 1,
// PATHINFO 分隔符修改:默認 '/', 可改為 '-'
'URL_PATHINFO_DEPR' => '-',
// 效果: /User-login-id-1 (需配合路由規則)
// 大小寫敏感:true=不區分(推薦)
'URL_CASE_INSENSITIVE' => true,
// 偽靜態後綴限制
'URL_HTML_SUFFIX' => 'html|shtml|xml',
// 開啟路由
'URL_ROUTER_ON' => true,
// 路由規則定義
'URL_ROUTE_RULES' => [
'login/:id' => 'User/login',
'/^article\/(\d+)$/' => 'Article/detail?id=:1',
],
];
?>
<?php
// 開啟調試模式:禁用緩存、顯示詳細錯誤、開啟頁面 Trace
define('APP_DEBUG', true);
define('APP_PATH', './Home/');
require './ThinkPHP/ThinkPHP.php';
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
</IfModule>
需確保 httpd.conf 載入 mod_rewrite 並允許 AllowOverride All。
location / {
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php/$1 last;
break;
}
}
<?php
// config.php
'SHOW_PAGE_TRACE' => true, // 頁面右下角顯示調試面板
// 包含: SQL日誌、執行流程、文件加載、變量值、錯誤信息等
項目上線嗎?
├─ 否 → 開發環境用 PATHINFO (URL_MODEL=1) + APP_DEBUG=true
└─ 是 → Web服務器支援 Rewrite 嗎?
├─ 是 → REWRITE 模式 (URL_MODEL=2) + .htaccess/nginx配置
└─ 否 → 支援 PATHINFO 嗎?
├─ 是 → PATHINFO 模式 (URL_MODEL=1)
└─ 否 → 兼容模式 (URL_MODEL=3)
| 問題 | 原因 | 解決 |
|---|---|---|
| REWRITE 模式 404 | Web 服務器未配置/未啟用 rewrite 模塊 | 檢查 .htaccess/nginx 配置、mod_rewrite 載入、AllowOverride |
| 參數獲取失敗 | URL_MODEL 設置與實際訪問模式不符 | 統一模式,或使用 I() 函數自動適配 |
| 大小寫導致 404 | Linux 區分大小寫,URL_CASE_INSENSITIVE 未開啟 | 設置 'URL_CASE_INSENSITIVE' => true |
| 偽靜態後綴不生效 | URL_HTML_SUFFIX 配置與路由衝突 | 檢查路由規則優先級、正則匹配順序 |
/,利於 RESTful 與前端框架路由兼容合理選擇並配置 URL 模式,不僅關乎 SEO 與用戶體驗,更是項目專業度的重要體現。