Raymond C. Rodgers wrote: > I'm trying to write an error handler in PHP to try to avoid sending the > browser a 404 error message. Basically, if someone > requests /whatever.html on the server and it doesn't exist, my 404 error > handler checks to see if /whatever.php exists, if so, it then includes > that file. > > That part works fine. > > The part that I'm having trouble with is if /whatever.html happens to be > the target of a form POST. With GET requests, the data is available in > either $_SERVER['REDIRECT_QUERY_STRING'] or (worst case) > $_SERVER['REQUEST_URI']. That's easy enough to parse and turn into > $_REQUEST and/or $_GET. However, it seems that POSTed data just vanishes > into thin air. $_POST is not set, of course, and I've been trying to > read data using file_get_contents('php://input') but nothing is > returned... Is this a bug in PHP, Apache, not a bug but an unimplemented > feature, security precaution, or what? Am I missing something simple to > get the POSTed data? No, you can't do what you are trying to do the way you are trying to do it. Apache changes the original POST to a GET request on the internal errordocument redirect so PHP can't get at the original posted data. Well, it probably could with some hacking, but the web server has specifically told us that this is not a POST request anymore, so we respect that. With Apache2 you could use Multiviews to do this by setting PHP up as a handler and telling Apache that it returns type text/html (we don't do this by default because PHP doesn't always return text/html) and then let multiviews take care of turning your request for /whatever.html into a real request for /whatever.php. And the POST data would be intact. For Apache1 you could probably use a type-map file. Have a read through http://httpd.apache.org/docs/content-negotiation.html A better option may be to just use mod_rewrite. Something along the lines of: RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)\.html$ $1.php [T=application/x-httpd-php,L] You should verify this with the mod_rewrite docs, but this should only rewrite a request for whatever.html to whatever.php if whatever.html doesn't exist. I suppose you could also add a condition to only do the rewrite if $1.php exists. -Rasmus -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php