May 4, 2017
kalpesh

Redirect request with POST data using .htaccess

By default, if you want to redirect request with POST data, browser redirects it via GET with 302 redirect. This also drops all the POST data associated with the request. Browser does this as a precaution to prevent any unintentional re-submitting of POST transaction.

But what if you want to redirect anyway POST request with it’s data? In HTTP 1.1, there is a status code for this. Status code 307 indicates that the request should be repeated with the same HTTP method and data. So your POST request will be repeated along with it’s data if you use this status code.

From https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html,
If the 307 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.

I did this in one of the website to redirect HTTP request to HTTPS for a specific page.

RewriteEngine on
RewriteCond %{SERVER_PORT} !443
RewriteCond %{REQUEST_URI} string_to_match_in_url
RewriteCond %{REQUEST_METHOD} POST
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [L,R=307]

For this to work, you need to have mod_rewrite enabled on the server. The first RewriteCond checks if the request is NOT coming as HTTPS, otherwise it will go in endless loop. If yes, the second RewriteCond checks if the URL contains a string we are looking for. Then if that URL is being submitted as POST method. If everything matches, then we redirect the request using HTTPS secure protocol retaining the POST method and the associated data.

6 Comments

  • Thanks for the code Kalpesh. We currently have a problem with Paypal’s IPN url system. We have a site with hundreds of subscriptions and we recently tried changing from http to https. This meant all the old subscriptions started failing as https is treated as a different url by paypal. Do you happen to know whether a 307 redirect would be a successful solution to this issue?

    • Hi Alan,

      I am running with the same problem, Did you able to resolve the issue?

  • Kalpesh, I am facing somewhat similar issue. Can you pls help.

    When I try to POST data from a html page using POST method I get a 302 redirect, and the webserver redirects to homepage of the website. But when I use GET method to send data, it redirects to the intended page. See the below HTML page I used and the URL I tried to redirect.
    POST 302 Redirect Test

    Order Id :

    Order Id :

    I want to use POST method but still go to https://www.rasisilks.com/magento2.3/payrld/page/gateway (https://www.rasisilks.com/magento2.3/payrld/page/gateway)

  • Worked like a charm. Great tip!

  • this works fine, solved my problem. thank you

  • Como se llamo esto i am from SPAIN

Leave a comment

 

Welcome to my Blog

Kalpesh MehtaHelping Magento developers in their day-to-day development problems since 2011. Most of the problems and solutions here are my own experiences while working on different projects. Enjoy the blog and don't forget to throw comments and likes/+1's/tweets on posts you like. Thanks for visiting!

Certifications

Honor

Recognition

Magento top 50 contributors

Magento top 50 contributors

Contributions