Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to get `$_POST` query when 404 redirected through .htaccess?

Tags:

php

.htaccess

This question is somewhat related to my previous question. The trick of using $_SERVER['REDIRECT_QUERY_STRING'] seems to work only for $_GET variables.

Well, I've an index.php file which handles all the 404 redirects.

If a user requests for a page which doesnt exist, say, apple.php?item=23, then using $_SERVER['REDIRECT_QUERY_STRING'] I can get the $_GET variable item=23, but if the variable is not $_GET but $_POST then $_SERVER['REDIRECT_QUERY_STRING'] doesn't work.

How can I get $_POST variable when I redirect it to index.php using the following .htaccess setting

ErrorDocument 404 /index.php

like image 401
Nok Imchen Avatar asked May 01 '12 11:05

Nok Imchen


2 Answers

Check answer here : http://www.brainonfire.net/blog/apache-pitfall-errordocument-post/

I solved my problem using this.


OR put this in your .htaccess file :


    RewriteEngine On
    RewriteBase /


    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /yourErrorDocument.php [L]

like image 192
SHA2NK Avatar answered Oct 26 '22 03:10

SHA2NK


With the following directive:

ErrorDocument 404 /index.php

the apache webserver does an internal redirect to the new location. Internal means, the client (browser) won't change the URL in it's address bar because that redirect is not communicated to the browser.

Because it's an redirect, the POST request is turned into a GET request.

You can see this by looking into the following two $_SERVER variables:

$_SERVER['REDIRECT_REQUEST_METHOD'] # POST
$_SERVER['REQUEST_METHOD'] # GET

So in short, you can not use the ErrorDocument directive to do URL rewriting for HTTP POST requests.

You need to use the mod_rewrite module for this or create your own apache handler.

like image 35
hakre Avatar answered Oct 26 '22 04:10

hakre