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

