Php Slim 4-作为查询参数的基本路径

Php Slim 4-作为查询参数的基本路径,php,slim,slim-4,Php,Slim,Slim 4,我有一个Slim 4应用程序正在运行,并将一些重复的url参数设置为基本路径,以便在url生成中不显示此参数 请求流: 调用http:demo.xyz?p1=a-->重写到http://slim.app/url/demo.xyz?p1=a通过Varnish代理 调用http://slim.app/url/demo.xyz?p1=a直接 这两个电话都需要工作 在中间件内部,我将/url/demo.xyz设置为基本路径,以便生成的url是http://demo.xyz?p1=a 这方面的问题是:

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

请求流:

  • 调用
    http:demo.xyz?p1=a
    -->重写到
    http://slim.app/url/demo.xyz?p1=a
    通过Varnish代理
  • 调用
    http://slim.app/url/demo.xyz?p1=a
    直接
  • 这两个电话都需要工作

    在中间件内部,我将
    /url/demo.xyz
    设置为基本路径,以便生成的url是
    http://demo.xyz?p1=a

    这方面的问题是:

    • routes.php
      无法将基本路径识别为要传递参数的内容,因此
      url/abc
      不匹配
    • 我仍然需要有
      url
      param的值才能在Slim应用程序中获取一些东西
    • 我的路由需要匹配此结构才能与两个请求流一起工作
    $app->group('/url/{url}',函数(RouteCollectorProxy$group){
    $group->get('[/[/city/{city}]]',IndexAction::class)->setName('home');
    //...
    });
    
    有什么办法让它工作吗


    这与问题有关。

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

    如果与“”匹配,则执行继续所需的操作

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