ThinkPHP 默認 PATHINFO 模式 URL 包含 index.php(如 /index.php/Module/Action),通過 Apache Rewrite 可實現純淨 URL(/Module/Action)。本文記錄完整配置步驟及常見坑點。
放置於入口文件同級目錄:
<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:交還給後續處理器(如 PHP)L:最後一條規則mod_rewrite:取消註釋 LoadModule rewrite_module modules/mod_rewrite.soAllowOverride None 改為 AllowOverride AllConf/config.php:
'URL_MODEL' => 2, // 2 = REWRITE 模式
坑點:某些 CMS(如 conist)配置為 'URL_MODEL' => C('TOKEN.false_static'),且初始化時 TOKEN.false_static = 1,導致模式固定為 1 (PATHINFO)。需強制修改配置或調整初始化邏輯。
https://domain/Module/Action 正常響應__APP__、U() 生成的 URL 不再包含 index.phpSAE 不支援 .htaccess,需編寫 config.yaml:
handle:
- rewrite: if(!is_dir() && !is_file() && path~"^(.*)$") goto "index.php/$1"
URL_MODEL 是否真正生效為 2,排查配置被覆蓋;確認 Apache mod_rewrite 已載入且 AllowOverride All。