Nginx loses POST variable with http -> https redir

2020-03-18 05:36发布

I have a website set up that uses the redirect method...

server {
    listen 80;
    server_name example.org;
    return 301 https://$server_name$request_uri;
}

However when a page is posted to "http://example.com" it redirects to "https://example.com" and in the process, it strips the POST.

I recognize this is how it works, however I need to somehow do one of the following...

  • Do a redirect from http -> https while keeping the POST variable intact
  • Convert the POST variable to a GET variable during the redirect (which would work fine)
  • Redirect everything EXCEPT for one folder

Any suggestions? I'm a bit lost...

3条回答
放我归山
2楼-- · 2020-03-18 05:57

If you are willing to forgo the "permanent" redirect status, I believe a 307 redirect instead of a 301 will preserve the POST. There actually is a redirect that is permanent and preserves the post, a 308, but it isn't well adopted yet by browsers and other user agents.

查看更多
SAY GOODBYE
3楼-- · 2020-03-18 06:12

This is a common problem and there is not an easy solution for this.

There are some answers with similar questions here

Apache 301 Redirect and preserving post data

Is it possible to redirect post data?

Maybe one of the answers could help to solve your issue

查看更多
虎瘦雄心在
4楼-- · 2020-03-18 06:18

A 308 redirect is a fix, but the solution is to POST directly to https:

  • by posting to http, your post data are not secure
  • the redirect make the process slower
  • if you post to http from an https webpage, browser may display a warning to the user
查看更多
登录 后发表回答