How to fetch the actual request URL in Apache/PHP if it does not exist and user is redirected to 404 error page?

北城余情 提交于 2019-12-12 03:36:56

问题


I want to fetch the actual URL of the request made by the client, how do I do that? I mean if someone requests a page that does not exists, like, http://localhost/invalid.php, and I have set 404 custom error file to http://localhost/test.php, then how do I get to know what was the actual URL requested by the user.

I have tried this in IIS7. I have set the Custom Error Page to /test.php, and whenever the user requests a URL which does not exist, I could still access that URL using $_SERVER['REQUEST_URI'] in /test.php and the URL in browsers still remains the same.

But I am having problem doing the same in Apache. I have set the Custom Error Page to /test.php but when user requests a page which doesn't exist, the user is redirected to a /test.php and I cant access the actual URL which the user requested. I've tried this print_r($_SERVER) but did not find the actual request URL any where in the $_SERVER array.


回答1:


I believe you could do it by using a RewriteCond rather that an error 404.

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ test.php?errpath=$1

The first line checks if the file actually exists.
The second routes the client to test.php.

Then in test.php you put something like:

<?php
    if ($_GET['errpath'] == "" || $_GET['errpath'] == "/") {
        require("index.php");
    }
    else {
        echo "The url ".$_GET['errpath']." does not exist.";
    }
?>

That checks if errpath is nothing or just a forward slash (meaning the client would normally be showed index.php), and is so, requires it. Otherwise do whatever you want for the 404 error page.

P.S. Sorry if the explanations seem patronizing, I just hate it when people tell me to do something and I don't understand. I don't want to do that to anyone else.



来源:https://stackoverflow.com/questions/14522724/how-to-fetch-the-actual-request-url-in-apache-php-if-it-does-not-exist-and-user

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!