获取位置块内的 nginx 位置通配符?

获取位置块内的 nginx 位置通配符?

我正在尝试设置一个 API,以便通过 URL 访问 API“foobar” http://my-apis.com/foobar/route。这是我目前所拥有的:

location ~ ^/foobar(/.*)$ {
    root /var/www/mysite/foobar/public;

    ... more fastcgi stuff ...

    fastcgi_param SCRIPT_FILENAME $document_root/index.php$1;
    fastcgi_param PATH_INFO $fastcgi_path_info;
}

API 正在路由到 Slim 框架应用程序,目前它成功路由到正确的 index.php,只要 URL 不以 开头,就会显示 nginx 404/403 /foobar。但是传递给 Slim 的路由(看起来它由第 6 行的 $1 表示)仍然是完整的/foobar/route。这意味着我必须将所有 Slim 路由附加到/foobar,虽然我可以使用 Slim 组,但这仍然很麻烦。我希望能够只将部分传递/route给 Slim。

有没有办法可以提取 location 指令中通配符匹配的部分?因为 $1 给出了完整路线。或者,我可以通过某种重写来做到这一点,但我对 Slim 了解不够。

任何帮助将非常感激!

谢谢!

答案1

SCRIPT_FILENAMEPATH_INFO是脚本的路径,而不是原始 URI。脚本从或 通过解码原始 URI(使用)获取路径信息REQUEST_URI

这可能对你有用:

fastcgi_param SCRIPT_FILENAME $document_root/index.php;
fastcgi_param PATH_INFO $1;

相关内容