如何编写Nginx位置以捕获查询字符串中问号后的所有内容?

时间:2018-06-19 23:59:57

标签: regex nginx nginx-location

我有一个看起来像这样的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

我需要一个与/api/things/index匹配的Nginx位置,并捕获?之后的查询字符串中的所有内容。我已经尝试过了:

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

但是$1为空。如果我更改此设置以捕获整个内容,例如:

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

我得到/api/things/index,但问号后什么也没有。我已经在多个在线正则表达式测试仪中尝试过正则表达式,并且捕获似乎可以正常工作,但是关于Nginx的位置肯定有些我不了解的地方。请帮忙!

1 个答案:

答案 0 :(得分:1)

您也许可以尝试

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

通过OP编辑
就像下面的评论一样,事实证明我的问题不仅仅在于正则表达式,而在于它使用捕获而不是$args。解决方案是:

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