我的目标是将所有 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;
}
}