如何使用PHP捕获丢失的URL(错误404)?

时间:2016-04-18 16:14:13

标签: php apache .htaccess mod-rewrite

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

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

我是否可以将错误/遗失的网址列表捕获到文本文件中(或)在错误页面 not_found.php 中显示错误/丢失的网址?

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

  1. 由于我在 .htaccess 中使用了错误页面的完整网址,因此失败了。如果我将其更改为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。

  3. 有人可以提出一些更好的想法来解决这个问题吗?

2 个答案:

答案 0 :(得分:0)

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

REDIRECT_URL
REDIRECT_QUERY_STRING

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

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

答案 1 :(得分:0)

您需要重写丢失的URL,甚至更好,您可以使用PHP来包含not_found.php文件。重定向搜索引擎会认为无法找到目录/not_found.php的问题,并且会认为重定向的网址只是被重定向。

示例:

dots = [dot() for i in range(N)] 

fig = plt.figure()  
ax = plt.axes(xlim=(0, 10), ylim=(0, 10)) 
d, = ax.plot([dot.x for dot in dots],[dot.y for dot in dots], 'ro', markersize=3)`

编辑:如果您在实际服务器上不存在文件时使用此功能,则需要重写。