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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NGINX重定向所有请求将URL与参数匹配到子域相关的知识,希望对你有一定的参考价值。

我有一个网站也在主域上的应用程序上提供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。

答案

要将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)。

以上是关于NGINX重定向所有请求将URL与参数匹配到子域的主要内容,如果未能解决你的问题,请参考以下文章

使用 URL 中的别名参数将旧子域重定向到新域

将通配符子域重定向到子目录,而不更改地址栏中的 URL

Nginx 将子域转换为路径组件而不进行重定向

nginx 重定向包括子域、www 和参数

使用 .htaccess 将 URL 重定向到子域

如何将任何子域请求重定向到asp.net中的主域