NGINX重定向所有请求将URL与参数匹配到子域

问题描述 投票:1回答:1

我有一个网站也在主域上的应用程序上提供api请求。我想将所有匹配/ api请求发送到api子域。

例如,我想https://example.com/api + https://example.com/api/some_action + https://example.com/api/some_action?params1=somevalue&params2=value2 ....重定向到相同的url结构,但只是在子域。

所以对于上面的例子:

https://example.com/api - > https://api.example.com/api

https://example.com/api/some_action - > https://api.example.com/api/some_action

https://example.com/api/some_action?params1=somevalue&params2=value2 .... - > https://api.example.com/api/some_action?params1=somevalue&params2=value2 ....

对于所有类型的请求(获取,发布等)。到目前为止,我已经在主域的服务器指令中尝试了这一点(在443 SSL服务器指令中)

location ~ /api(.*)$ {
  return 301 https://api.example.com/api/$request_uri$is_args$args;
}

我在https://api.example.com/api/some_action?param1=value上执行简单的GET请求时获得的结果是没有参数的https://api.example.com//some_action并且错过了api。

nginx nginx-config
1个回答
0
投票

要将example.com/api/foo?bar重定向到api.example.com/api/foo?bar,您应该使用:

location ^~ /api {
    return 307 https://api.exemple.com$request_uri;
}

$request_uri变量包含原始请求,包括/api/前缀和查询sring。

^~运算符给出了location优先级(详见this document)。 307状态代码通过重定向维护GET / POST(有关更多信息,请参阅this link)。

© www.soinside.com 2019 - 2024. All rights reserved.