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

PHP 偽靜態實作:URL 重寫與參數解析完整教學

     編輯:PHP 綜合知識

前言

偽靜態(URL Rewriting)讓動態網址呈現靜態頁面樣貌,利於 SEO 且易記。本文提供兩組核心函數 MakeUrl()/ParseUrl(),搭配 Apache mod_rewrite 或 PHP 內建 PATH_INFO 即可輕鬆實現。

核心函數

function MakeUrl($arr) {
    $url = [];
    foreach ($arr as $key => $value) {
        $url[] = $key . "_" . $value;
    }
    return implode("_", $url) . ".htm";
}

function ParseUrl() {
    if (!empty($_SERVER['PATH_INFO'])) {
        $pathinfo = substr($_SERVER['PATH_INFO'], 1); // 移除前導 /
        $pathinfo = str_replace(".htm", "", $pathinfo);
        $path = explode("_", $pathinfo);
        for ($i = 0; $i < count($path); $i += 2) {
            $_GET[$path[$i]] = $path[$i + 1];
        }
    }
}

使用範例

// 產生連結
$base = "https://www.example.com/blog.php/";
$link = $base . MakeUrl(['BlogID' => 2, 'page' => 1]);
// 結果:https://www.example.com/blog.php/BlogID_2_page_1.htm

// 目標頁面開頭呼叫
ParseUrl();
// 之後直接用 $_GET['BlogID'], $_GET['page']

Apache 隱藏 PHP 副檔名(選用)

編輯 httpd.conf 加入任一規則並重啟 Apache:

# 偽裝成其他語言
AddType application/x-httpd-php .asp .py .pl .jsp .aspx

# 偽裝成未知類型
AddType application/x-httpd-php .bop .foo .133t .los .abc

# 偽裝成 HTML
AddType application/x-httpd-php .htm .html

將 PHP 檔案改為對應副檔名即可生效。

進階:搭配 mod_rewrite(推薦生產環境)

.htaccess 範例:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^blog/([^/]+)/([^/]+)\.htm$ blog.php?BlogID=$1&page=$2 [L,QSA]
  • 完全分離 URL 結構與程式碼邏輯。
  • 支援任意規則,不侵入 PHP 程式。
  • 效能優於 PHP 解析 PATH_INFO。

安全性提醒

  • ParseUrl() 直接寫入 $_GET,若未驗證參數合法性,可能導致注入或邏輯繞過。
  • 建議加入白名單過濾:if (in_array($path[$i], $allowed_keys)) $_GET[...] = ...
  • 生產環境務必啟用 WAF 或框架內建路由元件。

結語

偽靜態核心在於「URL 結構化」與「參數還原」。MakeUrl/ParseUrl 適合輕量專案快速上線;中大型專案建議採用框架路由或 mod_rewrite,獲得更彈性、安全、可維護的 URL 管理。

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