首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

ThinkPHP URL 重寫去除 index.php 完整配置指南

     編輯:PHP 相關知識

ThinkPHP URL 重寫去除 index.php 完整配置指南

ThinkPHP 默認 PATHINFO 模式 URL 包含 index.php(如 /index.php/Module/Action),通過 Apache Rewrite 可實現純淨 URL(/Module/Action)。本文記錄完整配置步驟及常見坑點。

步驟一:.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:交還給後續處理器(如 PHP)
  • L:最後一條規則

步驟二:Apache httpd.conf 啟用模組與權限

  1. 啟用 mod_rewrite:取消註釋 LoadModule rewrite_module modules/mod_rewrite.so
  2. 允許覆蓋:將目錄配置 AllowOverride None 改為 AllowOverride All
  3. 重啟 Apache

步驟三:ThinkPHP 配置 URL 模式

Conf/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.php

新浪 SAE 環境特殊配置

SAE 不支援 .htaccess,需編寫 config.yaml:

handle:
  - rewrite: if(!is_dir() && !is_file() && path~"^(.*)$") goto "index.php/$1"

相關問答精選

Q: 配置後 URL 仍含 index.php?
A: 檢查 URL_MODEL 是否真正生效為 2,排查配置被覆蓋;確認 Apache mod_rewrite 已載入且 AllowOverride All。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved