首页 > 解决方案 > 如何编写 Nginx 位置以捕获查询字符串中问号后的所有内容?

问题描述

我有一个如下所示的 URL:

http://somedomain.loc/api/things/index?take=10&skip=0&page=1&pageSize=10&sort%5B0%5D%5Bfield%5D=date_created&sort%5B0%5D%5Bdir%5D=desc

我需要一个匹配的 Nginx 位置,/api/things/index并在?. 我试过这个:

location ~ /api/things/index?(.*) {
    return 200 $1;
}

但是$1是空的。如果我改变它来捕捉整个事情,比如:

location ~ (/api/things/index?.*)

我得到/api/things/index了,但问号后什么都没有。我已经在几个在线正则表达式测试器中尝试了正则表达式,并且捕获似乎有效,但肯定有一些关于 Nginx 位置的东西我不理解。请帮忙!

标签: regexnginxnginx-location

解决方案


你可以试试这个

location ~/api/things/index/(.*)$ {
  return 200 $1;
}

从 OP 编辑
​​如下面的评论,结果证明我的问题与其说是正则表达式,不如说是使用捕获而不是$args. 解决方案是:

location ~/api/things/index(.*)$ {
    return 200 $args;
}

推荐阅读