1

我正在尝试创建一个自定义 404 页面以包含以下信息:

抱歉,未找到此页面

您尝试查看的页面是:

请检查 URL 是否拼写正确,如果是,则此页面可能已被移动、删除或从未存在

我尝试使用:$_SERVER['HTTP_REFERER']捕获用户在自动重定向到 404 页面之前尝试查看的 URL

工作 .htaccess 代码

Options -MultiViews
RewriteEngine On

ErrorDocument 500 /500.php
ErrorDocument 404 /404.php

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !\.php$
RewriteRule ^(.*)$ $1.php [L,QSA]

现在可以了,感谢所有帮助过我的人

4

1 回答 1

1

您想使用$_SERVER['REQUEST_URI']which 为您提供访问当前页面的 URI。结果是格式/request_uri.php。请参阅http://php.net/manual/en/reserved.variables.server.php了解更多详情。

在您404.php的情况下,您可以执行以下操作:

The page you were trying to view was: <?php echo $_SERVER['REQUEST_URI']; ?>

更新:

更新您的ErrorDocument声明如下:

# Remove http://www.example.com
ErrorDocument 404 /404.php 

来自文档(http://httpd.apache.org/docs/2.2/mod/core.html#errordocument

请注意,当您指定一个指向远程 URL 的 ErrorDocument(即前面带有 http 等方法的任何内容)时,Apache 将向客户端发送重定向以告诉它在哪里可以找到该文档,即使该文档最终在同一台服务器上。这有几个含义,最重要的是客户端不会收到原始错误状态代码,而是会收到重定向状态代码。这反过来又会混淆网络机器人和其他尝试使用状态代码来确定 URL 是否有效的客户端。此外,如果您在 ErrorDocument 401 中使用远程 URL,客户端将不知道提示用户输入密码,因为它不会收到 401 状态代码。因此,如果您使用 ErrorDocument 401 指令,那么它必须引用本地文档。

于 2013-08-11T01:43:00.063 回答