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

PHP 實現偽靜態 URL 路由的極簡方案

     編輯:PHP 綜合知識

目標

將類似 index.php?action=one&do=two 的動態參數轉為 ?index/action/one/do/two 形式,並自動映射到對應模塊文件。

核心路由代碼(index.php)

<?php
// 1. 解析 QUERY_STRING
$qs = explode('&', $_SERVER['QUERY_STRING']);
$parts = explode('/', $qs[0]);

// 2. 確定模塊名(首段)
$modul = $parts[0] ? strtolower($parts[0]) : 'index';

// 3. 解析鍵值對(奇數索引為鍵,偶數為值)
$_QUERY = [];
for ($i = 1; $i < count($parts); $i += 2) {
    $key = $parts[$i];
    $val = isset($parts[$i+1]) ? $parts[$i+1] : '';
    $_QUERY[$key] = $val;
    $$key = $val;          // 同時註冊為變量(可選)
}

// 4. 模塊文件存在性檢查
if (!file_exists("modul_directory/{$modul}.php")) {
    $modul = 'index';
}

// 5. 載入佈局與模塊
include('template.php');           // 頭部/側邊欄
include("modul_directory/{$modul}.php"); // 業務邏輯
include('footer.php');             // 底部
?>

訪問示例

URL效果
www.example.com/?forum/topic/20載入 forum.php,$_QUERY['topic']=20
www.foo.com/?voting/id/54/type/piechart&choice=2載入 voting.php,$_QUERY['id']=54, $_QUERY['type']='piechart',$_GET['choice']=2 保留

進階建議

  • 配合 Web 服務器重寫:Apache mod_rewrite / Nginx rewrite 將 /forum/topic/20 內部轉發至 /?forum/topic/20,對用戶完全隱藏 ? 符號。
  • 安全過濾:對 $modul 嚴格白名單校驗,防止目錄遍歷攻擊(../)。
  • 擴展性:可引入正則路由表、控制器基類、依賴注入容器,逐步演進為微型 MVC 框架。

適用場景

中小型項目、快速原型、不想引入完整框架但需要友好 URL 的場景。大型系統建議直接採用 Laravel、Symfony、ThinkPHP 等成熟框架的路由組件。

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