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

無需 mod_rewrite:純 PHP 實現偽靜態 URL 解析

     編輯:PHP 綜合知識

純 PHP 實現偽靜態:無需 Apache 模塊也能優雅處理 URL

很多開發者認為偽靜態必須依賴 Apache 的 mod_rewrite 模塊,其實通過 PHP 內置的 $_SERVER['REQUEST_URI'] 變量,完全可以在不配置 Web 服務器的情況下實現偽靜態 URL 的解析。這對於虛擬主機、無權限修改 Apache 配置的環境尤為實用。

核心實現代碼

<?php
// 獲取請求 URI,例如:/xxx.php/param1|1234@param2|4321
$Php2Html_FileUrl = $_SERVER["REQUEST_URI"];

// 取最後一個 '/' 後的內容:param1|1234@param2|4321
$Php2Html_UrlString = str_replace("/", "", strrchr($Php2Html_FileUrl, "/"));

// 按 '@' 分割多個參數
$Php2Html_UrlQueryStrList = explode("@", $Php2Html_UrlString);

foreach ($Php2Html_UrlQueryStrList as $Php2Html_UrlQueryStr) {
    // 按 '|' 分割鍵值對
    $Php2Html_TmpArray = explode("|", $Php2Html_UrlQueryStr);
    // 註冊到 $_GET 超全局變量
    $_GET[$Php2Html_TmpArray[0]] = $Php2Html_TmpArray[1];
}

// 後續代碼即可像平常一樣使用 $_GET['param1'] 等
echo "偽靜態:\$_GET 變量<br />";
print_r($_GET);
?>

URL 格式約定

約定偽靜態 URL 格式為:

****.php/參數1|值1@參數2|值2@參數3|值3...

對應的傳統查詢字符串為:

****.php?參數1=值1&參數2=值2&參數3=值3...

實際應用示例

訪問 https://example.com/article.php/id|123@category|tech 後,代碼會自動解析並生成:

$_GET['id'] = '123';
$_GET['category'] = 'tech';

後續業務邏輯完全不用修改,直接使用 $_GET 即可。

優缺點分析

優點缺點
無需服務器配置權限URL 中包含 .php 後綴,不如 mod_rewrite 純淨
部署簡單,複製文件即可需在入口文件統一引入解析代碼
兼容所有支持 PHP 的 Web 服務器參數值包含特殊字符需額外編碼處理

進階建議

  • 將解析邏輯封裝為獨立文件(如 url_parser.php),在所有入口文件開頭 require_once
  • 對參數值進行 urldecode 處理,支持中文等特殊字符
  • 添加輸入驗證,防止惡意構造 URL 注入異常數據
  • 考慮使用更標準的 RESTful 風格:/controller/action/param1/value1/param2/value2

這種純 PHP 實現的偽靜態方案,雖然不如 mod_rewrite 完美,但在受限環境下是極佳的替代方案,讓你的應用也能擁有友好的 URL 結構。

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