PHP從完整的URL中提取出核心路徑的方式
獲取 這個 http://site.com/app/index.php/admin/user/delete?id=1 的核心路徑
$_SERVER['REQUEST_URI'] 是 PHP 中用于獲取當前請求的“路徑”和“查詢字符串”的超全局變量。
提供的 URL:http://site.com/app/index.php/admin/user/delete?id=1
$_SERVER['REQUEST_URI'] 獲取到的內(nèi)容是:
/app/index.php/admin/user/delete?id=1
詳細拆解
$_SERVER['REQUEST_URI'] 包含了 URL 中 域名之后、錨點(#)之前 的所有內(nèi)容。它由兩部分組成:
- Path(路徑):
/app/index.php/admin/user/delete - Query String(查詢字符串):
id=1(即?及其后面的部分)
這兩部分直接拼接在一起,中間沒有額外的字符。
對比其他相關變量
| 變量名 | 獲取的內(nèi)容 | 說明 |
|---|---|---|
$_SERVER['REQUEST_URI'] | /app/index.php/admin/user/delete?id=1 | 路徑 + 查詢字符串 (最常用) |
$_SERVER['SCRIPT_NAME'] | /app/index.php | 入口文件的路徑 (通常用于路由分發(fā)時剔除) |
$_SERVER['QUERY_STRING'] | id=1 | 僅 查詢字符串 部分 |
$_SERVER['PHP_SELF'] | /app/index.php/admin/user/delete | 當前執(zhí)行腳本的路徑 (不包含查詢字符串,但在某些服務器配置下可能不穩(wěn)定) |
代碼示例:
// 第一步:獲取完整請求 URI $rawUri = $_SERVER['REQUEST_URI']; // 結(jié)果: /app/index.php/admin/user/delete?id=1 // 第二步:只取路徑部分(去除 ?id=1) pathOnly = parse_url($rawUri, PHP_URL_PATH); // 結(jié)果: /app/index.php/admin/user/delete // 第三步:去除入口文件名 (假設入口文件是 index.php) $entryPoint = '/app/index.php'; // 通常來自 $_SERVER['SCRIPT_NAME'] $finalPath = str_replace($entryPoint, '', $pathOnly); // 結(jié)果: /admin/user/delete // 第四步:清理斜杠 $cleanPath = trim($finalPath, '/'); // 結(jié)果: admin/user/delete
偽靜態(tài)
偽靜態(tài)的核心作用是讓 Web 服務器(如 Nginx 或 Apache)在請求到達 PHP 之前,把“好看的 URL”內(nèi)部重寫成“帶參數(shù)的入口文件 URL”。
當使用 Nginx 進行 URL 重寫時:
當你在 Nginx 中配置了 URL 重寫(也稱為偽靜態(tài)設置),用戶的原始請求 URL 會被服務器重寫為另一種形式,然后再發(fā)送到后端的 PHP 腳本。這種情況下,有兩種主要方式來處理重寫后的請求:
1. 使用 `$request_uri 在 Nginx 中重寫:
在 Nginx 配置中,你可以使用 rewrite 指令來重寫請求。例如:
location / {
rewrite ^/product/([0-9]+)$ /index.php?page=product&id=$1 last;
}在這個例子中,所有訪問 /product/123 的請求都會被重寫為 /index.php?page=product&id=123。在這種情況下,$_SERVER['REQUEST_URI'] 在 PHP 中將反映為 /index.php?page=product&id=123,而不是原始的 /product/123。
2. 保持原始 URI 使用 `$uri:
為了在 PHP 中獲取原始 URI(即在瀏覽器地址欄中用戶看到的 URL),你可以在 Nginx 中使用 $uri 或 $request_uri 并將其傳遞到 PHP。例如:
location / {
try_files $uri $uri/ /index.php?$args;
}或者更明確地:
location / {
rewrite ^/product/([0-9]+)$ /index.php?page=product&id=$1 last;
try_files $uri $uri/ /index.php?original_uri=$request_uri&$args;
}結(jié)論:
- 如果你希望在 PHP 中獲取重寫后的請求 URI,那么
$_SERVER['REQUEST_URI']將反映重寫后的結(jié)果。 - 如果你需要在 PHP 中獲取并保留原始 URI,你需要在 Nginx 配置中顯式地將原始 URI 作為查詢參數(shù)傳遞到 PHP 腳本中,然后在 PHP 中通過
$_GET或$_REQUEST訪問這個參數(shù)。例如,使用original_uri=$request_uri。
通過這種方式,你可以靈活地控制 PHP 腳本中可用的 URI 信息,無論是原始的還是經(jīng)過重寫的。
以上就是PHP從完整的URL中提取出核心路徑的方式的詳細內(nèi)容,更多關于PHP從URL中提取核心路徑的資料請關注腳本之家其它相關文章!
相關文章
解析php根據(jù)ip查詢所在地區(qū)(非常有用,趕集網(wǎng)就用到)
本篇文章是對php根據(jù)ip查詢所在地區(qū)的實現(xiàn)方法進行了詳細的分析介紹,需要的朋友參考下2013-07-07
Windows上PHP安裝redis擴展和igbinary擴展
php擴展就是php核心并不支持的功能,通過安裝擴展增加PHP的功能,在Windows上有兩種加載PHP擴展的方式:把擴展編譯進?PHP,或者加載?DLL,加載預編譯的擴展是更簡單更被推薦的方式,要加載某擴展,需要在系統(tǒng)中有其相對應的“.dll”文件2023-10-10

