-1

我有一个 Slim 4 应用程序正在运行,并将一些重复的 url 参数设置为基本路径,以便在 url 生成中不显示它。

请求流:

  1. 调用--->通过 Varnish 代理http:demo.xyz?p1=a重写http://slim.app/url/demo.xyz?p1=a
  2. http://slim.app/url/demo.xyz?p1=a直接拨打

两个电话都需要工作。

在中间件中,我设置/url/demo.xyz为基本路径,因此生成的 URL 是http://demo.xyz?p1=a.

这样做的问题是:

  • 基本路径不被识别routes.php为传递参数的东西,因此url/abc不匹配。
  • 我仍然需要url参数的值才能在 Slim 应用程序中获取一些东西。
  • 我的路由需要匹配此结构才能与两个请求流一起使用。
 $app->group('/url/{url}', function (RouteCollectorProxy $group) {
    $group->get('[/[/city/{city}]]', IndexAction::class)->setName('home');
    //...
});

有什么想法可以让它发挥作用吗?

这与放置在这里的问题有关。

4

1 回答 1

0

在中间件中,您可以使用Request::getUri()方法获取整个 uri。然后,如果与第一个 url 格式“http:demo.xyz?p1=a”匹配,请执行以下操作:

return $response
  ->withHeader('Location', 'https://www.example.com')
  ->withStatus(302);

如果与“ http://slim.app/url/demo.xyz?p1=a ”匹配,则需要继续进行。

于 2019-12-30T18:26:08.310 回答