meW*_*arn 7 rewrite nginx url-rewriting laravel-4
我需要将POST数据保存到不同的URL
重写有效但后期数据丢失
需要将数据从user_info.php发布到userhistory
location ~ user_info.php {
rewrite ^/.* http://testing.com/userhistory permanent;
}
Run Code Online (Sandbox Code Playgroud)
数据丢失了.我该如何保存数据?
基本上,您想使用301移动永久重定向自动重定向POST请求。
然而。HTTP规范明确禁止此类重定向,其中指出:
如果响应GET或HEAD以外的请求而收到301状态代码,则用户代理不得自动重定向该请求,除非用户可以确认,因为这可能会更改发出该请求的条件。
规范还指出:
在收到301状态代码后自动重定向POST请求时,某些现有的HTTP / 1.0用户代理将错误地将其更改为GET请求。
我相信第二种情况可能是发生了什么,并且当目标服务器正在等待POST数据时,它正在接收GET数据。
您的选择是:
答:更改代码以使用GET数据或更好的POST和GET。IE,查找POST,如果不存在,请尝试GET等效项。
B.尝试通过使用规范来确保代码接收到POST数据。
您可以通过使用proxy_pass指令来处理请求,从而实现选择B。
如:
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;
}
Run Code Online (Sandbox Code Playgroud)
这样,用户在技术上不会被重定向。
您只需要编写带有HTTP状态代码307或的Nginx重写规则308:
location ~ user_info.php {
return 307 http://testing.com/userhistory;
}
Run Code Online (Sandbox Code Playgroud)
307或308应该使用Http状态代码代替,301因为它会将请求方法从POST更改为GET。请参阅
https://tools.ietf.org/id/draft-reschke-http-status-308-07.html#introduction
return与rewritenginx doc 相比,通过重定向也更好:https : //www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/#taxing-rewrites
| 归档时间: |
|
| 查看次数: |
13300 次 |
| 最近记录: |