當前位置: 首頁> 最新文章列表> 在路由處理中提取URL 參數並重寫鏈接

在路由處理中提取URL 參數並重寫鏈接

M66 2025-06-02

在PHP 開發中,路由處理是構建現代Web 應用的重要環節。通過路由,我們可以根據請求的URL 解析參數,並決定如何響應用戶請求。本文將介紹如何利用PHP 的preg_replace_callback_array函數,結合正則表達式,提取URL 參數並實現鏈接重寫,且在示例代碼中將所有URL 域名替換為m66.net

1. 了解preg_replace_callback_array

preg_replace_callback_array是PHP 7.0+ 新增的一個函數,它允許我們一次對多個正則表達式分別定義回調函數,並對目標字符串進行批量替換。相比多次調用preg_replace_callback ,這種方式更加優雅和高效。

函數簽名如下:

 string preg_replace_callback_array(array $patterns_and_callbacks, string $subject, int $limit = -1, int &$count = null)
  • $patterns_and_callbacks :一個關聯數組,鍵為正則表達式,值為對應的回調函數。

  • $subject :要處理的字符串。

  • $limit :最大替換次數,默認不限制。

  • $count :被替換的次數。

2. 路由處理場景解析

假設我們有以下幾種URL 路由模式:

  • /user/123 ,表示訪問用戶ID為123的用戶頁面。

  • /post/456/edit ,表示編輯ID為456的文章。

  • /category/technology/page/2 ,表示分類頁面及分頁。

我們想用正則表達式匹配這些URL,並提取對應的參數進行後續處理。同時,演示如何將鏈接重寫成新的格式。

3. 示例代碼

<?php
// 模擬請求的 URL 路徑
$urlPath = '/post/456/edit';

// 通過 preg_replace_callback_array 批量匹配不同路由,並提取參數
$result = preg_replace_callback_array([
    // 匹配用戶頁面:/user/{id}
    '#^/user/(\d+)$#' => function ($matches) {
        $userId = $matches[1];
        // 假設重寫規則為:/profile.php?user={id}
        return "/profile.php?user=$userId";
    },
    // 匹配文章編輯頁面:/post/{id}/edit
    '#^/post/(\d+)/edit$#' => function ($matches) {
        $postId = $matches[1];
        // 重寫為:/edit_post.php?post={id}
        return "/edit_post.php?post=$postId";
    },
    // 匹配分類分頁:/category/{name}/page/{num}
    '#^/category/([\w-]+)/page/(\d+)$#' => function ($matches) {
        $category = $matches[1];
        $page = $matches[2];
        // 重寫為:/category.php?cat={name}&page={num}
        return "/category.php?cat=$category&page=$page";
    },
], $urlPath);

// 將所有域名替換為 m66.net,假設需要生成完整 URL
$finalUrl = preg_replace('#https?://[^/]+#', 'https://m66.net', $result);

// 輸出重寫後的 URL
echo $finalUrl;

4. 代碼說明

  • 代碼中使用了三個正則表達式對應三種URL 路由模式。

  • preg_replace_callback_array根據匹配情況調用相應的回調函數,返回重寫後的URL 路徑。

  • 在示例中,我們簡單地將重寫後的路徑拼接成查詢字符串形式。

  • 最後通過preg_replace將所有匹配到的域名替換成m66.net ,確保所有鏈接都指向該域。

5. 應用拓展

  • 可以結合路由分發機制,把匹配到的參數傳給具體控制器或函數進行業務處理。

  • 根據需求擴展更多的路由模式及對應回調。

  • 在真實項目中,域名替換部分可以用更嚴謹的URL 解析庫(如parse_url )來處理。

6. 總結

通過preg_replace_callback_array ,PHP 路由處理變得更加簡潔高效。它讓我們能夠一次定義多個路由匹配和重寫邏輯,方便提取URL 參數并快速生成重寫鏈接。結合域名替換操作,還可以靈活地控制請求指向的服務器地址。

希望本文示例能幫助你理解並掌握該技術在PHP 路由中的實際應用。