在 Slim Framework 3 中检索查询字符串参数

Retrieving query string parameters in Slim Framework 3

我有一个 get 形式的路由

$app->get('/redirect[/{subject}]', function ($request, $response, $args) {

});

如果我向 /redirect/server?site=local&name=john

提出请求

我可以用

得到 subject
$request->getAttribute('subject')

但是,我无法获取查询参数。如果我检查 $request->getQueryParams() 我得到:

[
  '/redirect/server?site' => 'local',
  'name' => 'john'
]

而我希望查询参数是

[
  'site' => 'local',
  'name' => 'john'
]

我做错了什么?也许我应该指定 url 参数不能接受问号?

编辑 1

有人要求我 post 我的网络服务器配置。我明天可以访问那台开发机器,所以这只是提醒我自己添加上述信息。 但是 @jmattheis 已经给了我提示。

Slim Framework 3 setup for nginx 大致说了句

location / {
        try_files $uri /index.php$is_args$args;
    }

而我使用的是在某个时间点建议用于 slim 2 的重写代码段:

location / {
        try_files $uri $uri/ /index.php?$request_uri;
    }

此配置多年来对我来说运行良好,但碰巧我从未尝试过解析问号后面的任何内容。就在现在,我 fork 了一个废弃的项目,我正试图将原始 $_REQUEST 解析转换为 Slim 路由方法。

编辑 2

该项目的代码库位于没有路由逻辑的 repo phpPgAdmin6. It's basically a fork of phpPgAdmin 中,因此我试图将请求和响应集中到给定范围内,并使用 Slim 本机方法解析查询字符串。

如您所见,您需要使用

location / {
    try_files $uri /index.php$is_args$args;
}

而不是

location / {
    try_files $uri $uri/ /index.php?$request_uri;
}

第二个将整个请求 uri 添加为查询参数,结果类似于这样

index.php?/redirect/server?site=local&name=john

因此 /redirect/server?site 被指定为查询键。