當前位置: 首頁> 最新文章列表> 在PHP 中使用output_add_rewrite_var 配合rewrite_rules 生成友好的URL

在PHP 中使用output_add_rewrite_var 配合rewrite_rules 生成友好的URL

gitbox 2025-06-05

在PHP 開發中,生成用戶友好的URL(即所謂的SEO URL 或偽靜態URL)是一項常見需求。它不僅提升了用戶體驗,也有利於搜索引擎的收錄。大多數開發者會選擇使用Apache 的mod_rewrite 或Nginx 的rewrite 功能來實現,但PHP 本身也提供了一些輔助機制,比如output_add_rewrite_var() ,可以在特定場景下發揮作用,尤其是當你使用的是基於query string 的系統而又希望實現偽靜態效果時。

本文將講解如何將output_add_rewrite_var()與Web 服務器的URL rewrite 規則配合使用,以實現用戶友好的URL 輸出方式。

什麼是output_add_rewrite_var()

output_add_rewrite_var()是PHP 提供的一個輸出控制函數,可以在所有通過echoprint或模板輸出的URL(包括<a>標籤和表單)中自動追加指定的query 參數。這個函數常用於session ID 的自動傳播,也可以用於其它自定義變量。

 <?php
output_add_rewrite_var('page', 'home');
?>

上面的代碼會在輸出的所有URL 和表單中自動追加?page=home&page=home

配合Rewrite 規則美化URL

雖然output_add_rewrite_var()只能添加query string,但我們可以藉助服務器端的rewrite 功能,將這種query string 結構轉換為看起來更優雅的路徑格式。例如,把:

 https://gitbox.net/index.php?page=home

轉換為:

 https://gitbox.net/home

這是通過服務器的rewrite 規則實現的。

Apache 示例

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z0-9_-]+)$ index.php?page=$1 [L,QSA]

Nginx 示例

location / {
    try_files $uri $uri/ /index.php?page=$uri;
}

PHP 處理邏輯

然後在index.php中你可以根據$_GET['page']的值加載對應內容:

 <?php
$page = $_GET['page'] ?? 'home';

switch ($page) {
    case 'home':
        include 'pages/home.php';
        break;
    case 'about':
        include 'pages/about.php';
        break;
    default:
        include 'pages/404.php';
}
?>

這樣,訪問https://gitbox.net/about實際上會被重寫為index.php?page=about ,PHP 腳本就能識別並加載對應頁面了。

使用output_add_rewrite_var()自動追加鏈接參數

為了進一步自動化管理URL 的query 參數(例如分頁參數、語言參數等),你可以使用:

 <?php
output_add_rewrite_var('lang', 'zh');
?>

這會將頁面中的鏈接自動變為:

 https://gitbox.net/about?lang=zh

配合rewrite 規則使用,可以進一步對參數做重寫,使其變為:

 https://gitbox.net/zh/about

只需在服務器規則中加入一層語言識別即可。

小結

雖然現代框架(如Laravel、Symfony)提供了更加現代和結構化的路由方案,但在一些輕量級或自定義開發的項目中,PHP 原生的output_add_rewrite_var()配合服務器rewrite 規則,仍然是一種可行的用戶友好URL 生成方式。掌握這種方式,可以更靈活地控制項目的URL 結構,無需完全依賴外部框架。

此外,這種方法對於遺留項目尤其有用,不需要大幅改動代碼結構即可獲得更好的URL 表現效果。