PHP从完整的URL中提取出核心路径的方式
发布:smiling 来源: PHP粉丝网 添加日期:2026-07-15 17:21:14 浏览: 评论:0
文章介绍了`$_SERVER['REQUEST_URI']`在PHP中获取当前请求路径和查询字符串的功能,并对比了其他相关变量,详细解释了伪静态设置下如何在Nginx中重写URL,并提供了两种处理方式确保获取正确的请求URI,需要的朋友可以参考下。
获取 这个 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'] 获取到的内容是:
/app/index.php/admin/user/delete?id=1
详细拆解
$_SERVER['REQUEST_URI'] 包含了 URL 中 域名之后、锚点(#)之前 的所有内容。它由两部分组成:
Path(路径): /app/index.php/admin/user/delete
Query String(查询字符串): id=1 (即 ? 及其后面的部分)
这两部分直接拼接在一起,中间没有额外的字符。
对比其他相关变量
变量名:$_SERVER['REQUEST_URI']
获取的内容:/app/index.php/admin/user/delete?id=1
说明:路径 + 查询字符串 (最常用)
变量名:$_SERVER['SCRIPT_NAME']
获取的内容:/app/index.php
说明:入口文件的路径 (通常用于路由分发时剔除)
变量名:$_SERVER['QUERY_STRING']
获取的内容: id=1
获取的内容:仅 查询字符串 部分
变量名:$_SERVER['PHP_SELF']
获取的内容:/app/index.php/admin/user/delete
说明:当前执行脚本的路径 (不包含查询字符串,但在某些服务器配置下可能不稳定)
代码示例:
- // 第一步:获取完整请求 URI
- $rawUri = $_SERVER['REQUEST_URI'];
- // 结果: /app/index.php/admin/user/delete?id=1
- // 第二步:只取路径部分(去除 ?id=1)
- pathOnly = parse_url($rawUri, PHP_URL_PATH);
- // 结果: /app/index.php/admin/user/delete
- // 第三步:去除入口文件名 (假设入口文件是 index.php)
- $entryPoint = '/app/index.php'; // 通常来自 $_SERVER['SCRIPT_NAME']
- $finalPath = str_replace($entryPoint, '', $pathOnly);
- // 结果: /admin/user/delete
- // 第四步:清理斜杠
- $cleanPath = trim($finalPath, '/');
- // 结果: admin/user/delete
伪静态
伪静态的核心作用是让 Web 服务器(如 Nginx 或 Apache)在请求到达 PHP 之前,把“好看的 URL”内部重写成“带参数的入口文件 URL”。
当使用 Nginx 进行 URL 重写时:
当你在 Nginx 中配置了 URL 重写(也称为伪静态设置),用户的原始请求 URL 会被服务器重写为另一种形式,然后再发送到后端的 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;
- }
结论:
如果你希望在 PHP 中获取重写后的请求 URI,那么 $_SERVER['REQUEST_URI'] 将反映重写后的结果。
如果你需要在 PHP 中获取并保留原始 URI,你需要在 Nginx 配置中显式地将原始 URI 作为查询参数传递到 PHP 脚本中,然后在 PHP 中通过 $_GET 或 $_REQUEST 访问这个参数。例如,使用 original_uri=$request_uri。
通过这种方式,你可以灵活地控制 PHP 脚本中可用的 URI 信息,无论是原始的还是经过重写的。
Tags: PHP从完整的URL中提取出路径
- 上一篇:如何在 PHP 条件满足时动态加载 JavaScript 文件
- 下一篇:最后一页
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)
