php - 使用通配符配置 url 路由 php,检查 GET_ 数据
问题描述
我试图了解这里出了什么问题。我正在通过交换机使用 php 的路由。
localhost/bonify
重定向到正确的位置。
localhost/bonify?datasetID=1a2b3c4d5e6f7
重定向到 404。
http://localhost/bonify/split
去正确的地方。
localhost/bonify/split?datasetID=1a2b3c4d5e6f7
重定向到 404。
那么我如何允许localhost/bonify?datasetID=1a2b3c4d5e6f7
通过bonify.php
?我猜某种模式匹配 [0-9],['a'-'z'] through preg_match
? 或某种通配符,但localhost/bonify/split
不要与localhost/bonify
.
也许?
应该是模式匹配的一部分?我希望这是有道理的?
$request = $_SERVER['REQUEST_URI'];
switch ($request) {
case '/' :
require __DIR__ . '\bonify'. $version . '\home.php';
break;
case '' :
require __DIR__ . '\bonify'. $version . '\app\bonify.php';
break;
case '/bonify' :
require __DIR__ . '\bonify'. $version . '\app\bonify.php';
break;
case '/bonify/split' :
require __DIR__ . '\bonify'. $version . '\app\bonify_split.php';
break;
解决方案
switch 语句查找与模式相同的字符串。找出您的陈述为什么不起作用的最简单方法是将$request
变量打印出来并将其与您的案例进行比较。
对于localhost/bonify
:
$request = /bonify
它与模式相匹配。
对于localhost/bonify?datasetID=1a2b3c4d5e6f7
:
$request = /bonify?datasetID=1a2b3c4d5e6f7
"/bonify?datasetID=1a2b3c4d5e6f7" !== "/bonify"
那不匹配任何模式。你的 switch 语句中没有默认情况,所以你得到 404。
我看到的唯一方法是在您的情况下使用preg_match()函数(使用正确的正则表达式)来涵盖所有可能的选项。
编辑:如果您不需要该部分代码中的 URL 的 ID,您可以从问号(substr()
方法)中删除所有字符并将结果保存到新变量中。然后只需在 switch 语句中使用新变量。它也会起作用。
$request = $_SERVER['REQUEST_URI'];
$cutRequest = strpos($request, "?") ? explode("?", $request)[0] : $request;
switch ($cutRequest) {
// ....
}
推荐阅读
- python - 将错误从字典附加到数据框
- django - Django 自定义 __in 查找
- pytorch - Pytorch 中的迁移学习:输入维度问题
- sql - 包规范中 RETURN 语句的用途是什么
- google-tag-manager - 如何让标签在谷歌标签管理器中的其他标签之前运行?
- sql - 在 Postgres 中搜索多维数组
- bash - 如何从 tr 输出中删除空空格
- reactjs - 如何使用'useState'来改变在反应?
- javascript - JQuery - 遍历文本框并将值保存到 Javascript 对象
- rabbitmq - RabbitMQ:通道关闭:连接错误回复代码 = 504,回复文本 = CHANNEL_ERROR