我正在尝试创建一个自定义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]
它现在工作了,感谢所有帮助我的人
您想要使用$_SERVER['REQUEST_URI']
,它为您提供访问当前页面的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指令,则它必须引用本地文档。