nginx重写post数据 [英] nginx rewrite post data

查看:28
本文介绍了nginx重写post数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要将 POST 数据保存到不同的 url

I need to preserve the POST data to a different url

重写工作,但帖子数据丢失

The rewrite works but the post data is lost

需要将数据从 user_info.php 发布到 userhistory

need to post data from user_info.php to userhistory

 location  ~ user_info.php {
  rewrite ^/.* http://testing.com/userhistory  permanent;
 }

数据丢失.如何保存数据?

The data is lost. How can I preserve the data?

推荐答案

基本上,您希望使用 301 Moved Permanently 重定向自动重定向 POST 请求.

Basically, you want to automatically redirect a POST request using a 301 Moved Permanently redirect.

但是.HTTP Specifications 明确禁止此类重定向那:

However. such redirect are specifically disallowed by the HTTP Specifications which states that:

如果收到 301 状态代码以响应 GET 或 HEAD 以外的请求,用户代理不得自动重定向请求,除非用户可以确认,因为这可能会改变请求被执行的条件发布.

If the 301 status code is received in response to a request other than GET or HEAD, the user agent MUST NOT automatically redirect the request unless it can be confirmed by the user, since this might change the conditions under which the request was issued.

规范还指出:

在收到 301 状态码后自动重定向 POST 请求时,一些现有的 HTTP/1.0 用户代理会错误地将其更改为 GET 请求.

When automatically redirecting a POST request after receiving a 301 status code, some existing HTTP/1.0 user agents will erroneously change it into a GET request.

我相信第二种情况可能是发生了什么,当目标服务器期待 POST 数据时,它正在接收 GET 数据.

I believe the second situation may be what is going on and that while the target server is expecting POST data, it is receiving GET data instead.

您的选择是:

A.更改代码以使用 GET 数据,或者更好地使用 POST 和 GET.即,查找 POST,如果没有,请尝试 GET 等效项.

A. Change the code to work with GET data or better still, both POST and GET. I.E., look for POST and if not there, try GET equivalents.

B.尝试通过使用 Spec 来确保代码接收 POST 数据.

B. Try to ensure the code receives POST data by working with the Spec.

您可以通过使用 proxy_pass 指令来处理请求来实现选择 B.

You may be able to achieve Choice B by using the proxy_pass directive to handle the request instead.

诸如:

location  ~ user_info.php {
    proxy_pass http://testing.com/userhistory;
    proxy_redirect off;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

这样,用户在技术上不会被重定向.

In this way, the user is technically not being redirected.

这篇关于nginx重写post数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆