0

我想获取客户端发出的请求的实际 URL,我该怎么做?我的意思是,如果有人请求一个不存在的页面,例如http://localhost/invalid.php,并且我已将 404 自定义错误文件设置为http://localhost/test.php,那么我如何知道用户请求的实际 URL 是什么。

我已经在 IIS7 中尝试过这个。我已将自定义错误页面设置为 /test.php,并且每当用户请求一个不存在的 URL 时,我仍然可以使用 /test.php 中的 $_SERVER['REQUEST_URI'] 访问该 URL,并且浏览器中的 URL 仍然保持原样。

但我在 Apache 中做同样的事情时遇到问题。我已将自定义错误页面设置为 /test.php,但是当用户请求一个不存在的页面时,用户被重定向到 /test.php,我无法访问用户请求的实际 URL。我已经尝试过了,但在数组print_r($_SERVER)中的任何位置都没有找到实际的请求 URL 。$_SERVER

4

1 回答 1

2

我相信您可以通过使用RewriteCond错误 404 来做到这一点。

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

第一行检查文件是否确实存在。
第二个将客户端路由到test.php.

然后在test.php你输入类似的东西:

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

这会检查是否errpath什么都不是,或者只是一个正斜杠(意味着通常会显示客户端index.php),并且确实如此,需要它。否则为 404 错误页面做任何你想做的事。

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.

于 2013-03-03T00:57:38.210 回答