index.php預設 ThinkPHP URL 格式為 https://domain.com/index.php/模組/控制器/方法,既不美觀也不利 SEO。啟用 URL 重寫後可簡化為 https://domain.com/模組/控制器/方法,提升專業度與使用者信任感。
mod_rewrite 模組編輯 httpd.conf,找到並取消註解:
LoadModule rewrite_module modules/mod_rewrite.so
重啟 Apache 生效。
.htaccess 覆寫在對應的 <Directory> 區塊將 AllowOverride None 改為 All:
<Directory "/var/www/html">
AllowOverride All
Require all granted
</Directory>
.htaccess<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
</IfModule>
!-d:非目錄!-f:非檔案QSA:附加原查詢字串PT:傳遞給下一個處理器L:最後一條規則在 config/app.php 或模組設定檔:
<?php
return [
'url_route_on' => true,
'url_model' => 2, // PATHINFO 模式
'url_html_suffix' => '', // 移除 .html 後綴
];
?>
在 server 區塊加入:
location / {
if (!-e $request_filename) {
rewrite ^/(.*)$ /index.php/$1 last;
break;
}
}
或更標準的 try_files 寫法:
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
.htaccess 技巧資源管理器無法直接建立以點開頭的檔案,解決方法:
htaccess.txtrename htaccess.txt .htaccess.htaccess| 現象 | 可能原因 | 解決方向 |
|---|---|---|
| 404 Not Found | mod_rewrite 未啟用或 AllowOverride 設定錯誤 | 檢查 httpd.conf、error_log |
| 無限重導向 | RewriteRule 規則匹配到自身 | 確認 !-f !-d 條件、避免重寫靜態資源 |
| CSS/JS/圖片失效 | 相對路徑基準改變 | 使用絕對路徑或 <base> 標籤 |
| 參數無法獲取 | QSA 旗標遺漏 | 加上 [QSA,PT,L] |
移除 index.php 需「Web Server 重寫規則」+「框架 URL 模式設定」雙管齊下。Apache 靠 .htaccess,Nginx 靠 try_files,原理相同:將不存在的靜態資源請求轉發給 index.php 處理。完成配置後,記得清除瀏覽器快取與框架快取(php think clear)驗證成果。