【问题标题】:i want to output on 404 page the url the user was trying to use that resulted in the 404 page我想在 404 页面上输出用户尝试使用导致 404 页面的 url
【发布时间】:2013-08-12 14:55:36
【问题描述】:

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

抱歉,找不到此页面

您尝试查看的页面是:

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

我尝试使用:$_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]

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

【问题讨论】:

    标签: php .htaccess http-referer custom-error-pages url-redirection


    【解决方案1】:

    您想使用$_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 指令,那么它必须引用本地文档。

    【讨论】:

    • 它显示:您尝试查看的页面是:/404 当它显示为 /cats
    • @JenStar23,请将您的 ErrorDocument 定义更新为 ErrorDocument 404 /404.php。我已经更新了我的答案,包括为什么。
    • @JenStar23,检查是否有任何拼写错误或语法错误,您不应该仅仅因为更改该行而得到 500。
    • 在上面添加了更多相同的 .htaccess,以防是这样
    • 你能把你的404.php的路径发布到文档根目录吗?
    猜你喜欢
    • 2013-04-01
    • 2017-09-23
    • 2014-10-26
    • 1970-01-01
    • 1970-01-01
    • 2013-01-22
    • 1970-01-01
    • 1970-01-01
    • 2018-10-10
    相关资源
    最近更新 更多