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

PHP 偽靜態實作:利用 PATH_INFO 與 mod_rewrite 解析自訂 URL 參數

     編輯:PHP 綜合知識

核心函數 mod_rewrite()

<?php
function mod_rewrite() {
    global $_GET;

    $nav = $_SERVER["REQUEST_URI"];
    $script_name = $_SERVER["SCRIPT_NAME"];

    // 移除腳本名稱部分,取得 PATH_INFO
    $nav = substr(ereg_replace("^ $script_name", "", urldecode($nav)), 1);

    // 移除尾部 .html / .htm
    $nav = preg_replace("/^.ht(m){1}(l){0,1}$/", "", $nav);

    // 以 / 分割成鍵值對
    $vars = explode("/", $nav);
    for ($i = 0; $i < count($vars); $i += 2) {
        $_GET[$vars[$i]] = $vars[$i + 1];
    }
    return $_GET;
}
?>

使用範例

訪問 URL:https://example.com/test.php/year/2006/action/_add.html

呼叫 mod_rewrite() 後,$_GET 將包含:

$_GET['year']   = '2006';
$_GET['action'] = '_add';

Apache 配合 .htaccess

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

所有請求導向 index.php,由 PHP 內部解析 REQUEST_URI。

優缺點分析

優點缺點
無需修改 Apache 配置即可使用(僅需 .htaccess)所有動態請求經 PHP 處理,略增加開銷
URL 結構靈活,利於 SEO需自行處理參數驗證與安全過濾
相容虛擬主機環境靜態資源(圖片、CSS、JS)需排除 Rewrite

進階建議

  • 採用成熟路由庫(如 FastRoute、Symfony Routing)替代手寫解析。
  • 結合 PATH_INFO($_SERVER['PATH_INFO'])更標準化。
  • 注意雙重編碼問題,建議使用 rawurldecode()。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved