首页 > 解决方案 > 使用通配符配置 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;

标签: phproutes

解决方案


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) {
 // ....
 }

推荐阅读