如何在PHP的router.php中获取前端fetch请求的路由路径?
router.php 提取请求路径的实现方法
你当前的请求为 fetch("router.php/getAll"),PHP 不会自动将斜杠后的 /getAll 识别为独立路由参数,需要从服务端请求环境变量中手动解析提取,具体实现如下:
核心路径解析逻辑
- 优先使用
$_SERVER['REQUEST_URI']获取完整请求地址:该字段会存储域名之后的全量请求路径,对应你写的请求,字段值为/router.php/getAll - 按两步清洗得到可用的路由值:
- 拆分去掉 URI 中
?后的查询参数,避免路由匹配时被查询值干扰 - 剥离
router.php这个入口文件的固定前缀,剩余部分就是你需要匹配的/getAll路径
- 拆分去掉 URI 中
可直接复用的示例代码
// router.php 内部代码 // 1. 获取完整请求URI $fullUri = $_SERVER['REQUEST_URI']; // 2. 拆分出纯路径部分,去掉查询字符串 $purePath = parse_url($fullUri, PHP_URL_PATH); // 3. 动态剥离入口文件所在的目录前缀,得到相对路由 $relativeRoute = str_replace($_SERVER['SCRIPT_NAME'], '', $purePath); // 4. 清理首尾斜杠,统一格式方便匹配 $relativeRoute = trim($relativeRoute, '/'); // 基于提取的路由做逻辑匹配 switch ($relativeRoute) { case 'getAll': // 接入你需要的获取用户开销数据的业务逻辑 header('Content-Type: application/json'); echo json_encode(['data' => '这里是返回的开销列表数据']); break; default: http_response_code(404); echo json_encode(['error' => '请求的路由不存在']); }
开发时需要注意的常见问题
- 不要硬编码要剥离的固定字符串
router.php:用$_SERVER['SCRIPT_NAME']动态匹配入口路径,后续即使修改入口文件名、将项目部署到子目录下,路由解析逻辑也不会失效 - 必须加
parse_url()步骤:如果后续接口需要带查询参数(比如router.php/getAll?user_id=12),缺少这一步会把查询参数混进路由值,导致匹配失败 - 确认服务端伪静态配置:如果使用 Nginx/Apache 部署,要保证带路径后缀的请求能正常转发到
router.php,不会被服务器直接拦截返回404
小型项目的简化替代方案
如果是开发规模较小的项目,也可以不做路径解析,直接通过GET参数传递路由标识:前端将请求改为fetch("router.php?route=getAll"),后端直接读取$_GET['route']的值做匹配即可,这种方式开发成本更低,不需要额外写路径清洗逻辑。
内容的提问来源于stack exchange,提问作者Reem Obeid
相关产品推荐
相关产品推荐

