将 nginx 服务器上的所有 POST / GET 请求重定向到另一个域

将 nginx 服务器上的所有 POST / GET 请求重定向到另一个域

我的目标是将所有 API 请求(GET 或 POST)从old-domain.com重定向到new-domain.com,但仅从特定的 GETcompany_id值(ABC)重定向。我们仍将除此之外的其他请求处理到old-domain.com

例如 :

old-domain.com/user/view/123?company_id=ABC

将被重定向至

new-domain.com/user/view/123?company_id=ABC

但是,我需要对这些 URL 的所有请求都不要被重定向。

old-domain.com/user/view/123?company_id=XYZ
old-domain.com/user/view/123
old-domain.com/other/api/as/well

这是我目前所做的事情。

if ($arg_company_id = ABC) {
    return 302 https://new-domain.com$request_uri;
}

一切运行良好,但我面临另一个问题。我还需要重定向所有 POST 请求。

old-domain.com/user/update/123?company_id=XYZ
POST variables : name=John, phone_number=555123

上述请求只会重定向请求,而不会重定向POST数据(name=John, phone_number=555123数据不会发送到新域)。

我已经阅读过proxy_pass但这种方法不适用于不同的域名。

希望可以得到一些启发,谢谢。

更新:感谢 Ivan 的回答。我将我的配置文件修改为如下内容(nginx 不支持 nested-if):

    set $RR "";

    if ($arg_company_id = ABC) {
        set $RR R;
    }

    if ($request_method = GET) {
        set $RR "${RR}G";
    }

    if ($request_method = POST) {
        set $RR "${RR}P";
    }

    if ($RR = RG){
       return 302 https://new-domain.com$request_uri;
    }

    if ($RR = RP) {
        return 307 https://new-domain$request_uri;
    }

答案1

尝试HTTP 307重定向,应保留 POST 请求主体:

if ($arg_company_id = ABC) {
    if ($request_method = GET) {
        return 302 https://new-domain.com$request_uri;
    }
    if ($request_method = POST) {
        return 307 https://new-domain.com$request_uri;
    }
}

相关内容