【问题标题】:How to capture missing URLs (Error 404) using PHP?如何使用 PHP 捕获丢失的 URL(错误 404)?
【发布时间】:2016-04-18 16:14:13
【问题描述】:

在我的网络服务器中,我创建了一个带有以下行的 .htaccess 文件,以将错误/丢失的 URL(错误 404)重定向到 php 文件 not_found.php。它工作正常。

ErrorDocument 404 http://myserver.edu.in/not_found.php

我能否将错误/丢失的 URL 列表捕获到文本文件中(或)在错误页面 not_found.php 本身中显示错误/丢失的 URL?

我尝试了 not_found.php 文件中的 PHP 变量 $_SERVER['REQUEST_URI'] 来捕获错误/缺失的 URL。现在我有两个问题。

  1. 由于我在 .htaccess 中使用了错误页面的完整 URL,因此失败。如果我将其更改为ErrorDocument 404 /not_found.php。它只能在同一目录中正常工作。

  2. not_found.php 文件中,我使用了include_once 函数来包含页眉、页脚、图像和脚本。所以,如果我将 .htaccess 更改为 ErrorDocument 404 /not_found.php,错误页面 not_found.php 不会在不同的目录中正确显示。

    例如,http://myserver.edu.in/xxx/trial.php

    在这种情况下,我为图像和脚本使用了完整的 URL。但是,无法使用 include_once 函数对 PHP 文件使用完整 URL。

谁能提出一些更好的想法来解决这个问题?

【问题讨论】:

  • 关于第二期,你能再解释一下吗? does not display properly in the different directory我真的不明白你的意思。
  • @CharlotteDunois 在第二期中,错误页面在其他目录中不显示包含的文件。
  • Apache 已经将所有 404 错误记录到它自己的日志中。您最好解析此日志或找到处理此日志的程序。
  • @RiggsFolly 不正确。如果您将 php 脚本作为 404 错误文档,它运行该脚本就好了。我们使用它来重定向所有页面,包括 404 错误到网站上的登录表单,您加载的每个页面都需要登录。
  • @JonathanKuhn 啊,是的,你是对的,我显然错过了问题的那一部分。显然是时候喝杯咖啡了

标签: php apache .htaccess mod-rewrite


【解决方案1】:

通过ErrorDocument指令,Apache还设置了一些特殊的环境变量,例如:

REDIRECT_URL
REDIRECT_QUERY_STRING

如果(正如您已经注意到的)错误文档没有以 http 开头的路径,这些应该可用。因此,您可以将未找到的请求存储在您的数据库或一些文本文件中。

但是,$_SERVER["REQUEST_URI"] 也可用,如果文件不在该特定服务器上,我会在类似情况下使用它来将请求重定向到另一个域。

【讨论】:

    【解决方案2】:

    您需要重写丢失的 url,或者更好的是,您可以使用 PHP 来包含 not_found.php 文件。重定向的问题是,搜索引擎会认为目录 /not_found.php 找不到,会认为重定向的 url 只是被重定向。

    例子:

    <?php
    header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found", true, 404);
    include("notFound.php");
    ?>
    

    编辑:如果您在实际服务器上不存在文件的情况下使用它,则需要重写。

    【讨论】:

      猜你喜欢
      • 2013-12-24
      • 1970-01-01
      • 2014-09-15
      • 2011-02-10
      • 2020-10-26
      • 1970-01-01
      • 2017-04-17
      • 2021-11-09
      相关资源
      最近更新 更多