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

ThinkPHP PATHINFO、四種 URL 模式與 URL 重寫完整指南

     編輯:PHP 綜合知識

ThinkPHP 提供四種 URL 訪問模式,配合 Apache/Nginx 重寫可實現優雅的 RESTful 風格 URL。本文系統整理模式差異、設定步驟與避坑指南。

核心概念:PATHINFO

PATHINFO 模式下,URL 參數以路徑形式傳遞:

# 等價請求
https://localhost/index.php?m=Index&a=test
https://localhost/index.php/Index/test

四種 URL 模式 (URL_MODEL)

值模式名稱URL 範例特點
0普通模式?m=Module&a=Action相容性最好、URL 醜陋、SEO 差
1PATHINFO/Module/Action語義清晰、無需 Server 設定、預設推薦
2REWRITE (偽靜態)/Module/Action (無 index.php)最美觀、需 Web Server 重寫規則、SEO 最佳
3相容模式?s=Module/Action不支援 PATHINFO 的 Server 替代方案

設定位置

// Conf/config.php 或 Conf/convention.php
'URL_MODEL' => 2, // 設定為 REWRITE 模式

URL 重寫 (REWRITE) 完整啟用步驟

Apache

  1. 開啟 httpd.conf,確保載入 mod_rewrite:
    LoadModule rewrite_module modules/mod_rewrite.so
  2. 允許 .htaccess 覆寫:
    AllowOverride All(將 None 改為 All)
  3. 專案入口目錄建立 .htaccess:

    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]

Nginx

location / {
    if (!-e $request_filename) {
        rewrite ^/(.*)$ /index.php/$1 last;
    }
}

驗證重寫生效

  • 訪問 https://domain.com/Module/Action(無 index.php)正常顯示頁面。
  • 檢查 $_SERVER['PATH_INFO'] 正確解析。

效能與取捨

模式效能SEO維護性建議場景
普通 (0)最快差簡單內部 API、管理後台
PATHINFO (1)快良簡單大多數專案預設選擇
REWRITE (2)略慢 (重寫開銷)最佳需 Server 維護前台展示站、SEO 敏感專案
相容 (3)快良簡單舊版 Server、虛擬主機受限環境

常見問題排查

  • 404 錯誤:mod_rewrite 未開啟、AllowOverride 未設為 All、.htaccess 路徑錯誤。
  • 無限重導向:重寫規則衝突,檢查 RewriteCond 排除實體檔案/目錄。
  • 參數無法獲取:確認 URL_MODEL 設定生效、PATH_INFO 變數正確。

根據專案階段與部署環境選擇適當模式:開發期用 PATHINFO (1),正式上線關鍵前台頁面升級 REWRITE (2),後台管理可維持 PATHINFO 或普通模式。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved