如何在phpleague路由中处理多余的“ /”?

曼莫汉·比什诺(Manmohan Bishnoi)

我正在为我的Web应用程序设置端点,如下所示:

$router = new League\Route\RouteCollection;

function user_action (Request $request, Response $response) {
    // some logic
    .
    .
    .
    return $response;
}

$router->addRoute('GET', '/user', 'user_action');

/ user端点运行良好。

但是,当我使用/ user /(最后加反斜杠)时,我得到了

League \ Route \ Http \ Exception \ NotFoundException

我希望两个端点都指向相同的功能。我可以通过分别为两个端点添加路由来实现所需的行为:

$router->addRoute('GET', '/user', 'user_action');
$router->addRoute('GET', '/user/', 'user_action');

建议的解决方法是什么?

dvdheiden

有两种选择

  1. 您可以使用htaccess从网址中删除结尾的斜杠。
  2. 向调度员发送不带斜杠的URL。

解决方案1:htaccess

将以下重写规则添加到您的.htacces:

RewriteRule ^(.*)/$ /$1 [L,R=301]

解决方案2:调度员

从RouteCollection创建路由器后,您将获得调度程序并调度路由:

$router = new RouteCollection();
$dispatcher = $router->getDispatcher();
$response = $dispatcher->dispatch($request->getMethod(), $request->getPathInfo());

发送到调度程序的URL可以很容易地进行调整:

$url = $request->getPathInfo();

// if url ends with a slash, remove it
$url = rtrim($url, '/');

$response = $dispatcher->dispatch($request->getMethod(), $url);

有两种简单的解决方案,取决于您使用哪种解决方案。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章