【问题标题】:nginx redirect POST requestsnginx 重定向 POST 请求
【发布时间】:2025-12-21 02:20:46
【问题描述】:

我有一个接受https://www.example.com/API/ooo/xxxhttps://www.example.com/API/aaa/bbbhttps://www.example.com/API/xxx/yyy ...等的网络服务器。

现在我们要将上述任务重定向到https://www.example.com/ooo/xxxhttps://www.example.com/aaa/bbbhttps://www.example.com/xxx/yyy ...等。

我试过在 nginx 中使用rewrite 关键字:

location /API/ {
    rewrite ^/API(.*)$ https://$host$1 redirect;
}

这适用于 GET 请求。但它会将 POST 请求转换为 GET 请求。这是我不想要的。

如何在将/API/* 重定向到/* 时保留http 方法?

这个post 说我可以使用307 重定向。但是rewrite 似乎不支持307 重定向。而且我不知道如何在return 中使用$1 正则表达式属性。

【问题讨论】:

    标签: nginx


    【解决方案1】:

    使用return 语句。您可以使用正则表达式 location 块来捕获要返回的 URI 部分。

    例如:

    location ~ ^/API(/.*)$ {
        return 307 $1$is_args$args;
    }
    

    请注意,对于正则表达式location 指令,它在配置中的顺序很重要,因此您可能需要移动它。有关详细信息,请参阅this document

    【讨论】:

    • 感谢您的帮助。但是return 307 $1$is_args$args; 将 POST https://www.example.com/API/ooo/xxx 重定向到 POST http://www.example.com/ooo/xxx。是否可以保留https 协议?
    • 我试过return 307 https://$1$is_args$args;。但这不起作用。它将 POST https://www.example.com/API/ooo/xxx 重定向到 POST https:///ooo/xxx
    • 抱歉,我忘了提到我在客户端和 nginx 之间有一个 AWS 应用程序负载均衡器。负载均衡器接收 https 请求并向 nginx 发送 http 请求。这就是为什么我需要添加https 协议。