通过ErrorDocument 404指令重定向不存在的文件并记录引用者?

时间:2013-04-11 04:09:38

标签: apache .htaccess mod-rewrite

我正在尝试将人们可能登陆的不存在的文件重定向到特定文件(landing.php),但我也想为这些404情况录制一个推荐人......那么我该怎么办呢? / p>

现在我的.htaccess文件中有一个简单的ErrorDocument 404 /landing.php条目,但我如何/在哪里可以实际捕获用户来自自定义目标网页时引用的引荐来源(还有其他的,常客访问landing.php页面,所以我不能只记录该页面的所有推荐人,那么有没有办法只分开404流量?)

2 个答案:

答案 0 :(得分:1)

您不能依赖引用者,因为人们和软件可以轻松调整它。根据我的经验,大多数人不这样做,所以它仍然值得跟踪,只要确保在使用之前检查它是否已设置。

当您使用ErrorDocument指令时,可以在$ _SERVER数组中访问Apache will set the REDIRECT_STATUS env变量,并且将包含HTTP状态代码。

if (!empty($_SERVER['REDIRECT_STATUS']) && $_SERVER['REDIRECT_STATUS'] == '404') {

    if (!empty($_SERVER['HTTP_REFERER'])) {
        // Log the referer
    }
}

注意:我看到有些人说这并不总是有效,但我找不到触发环境变量设置的内容。

<强>更新

根据Apache manual这些环境变量仅在您使用本地URL时设置。这意味着你应该在ErrorDocument 404 direcive中给出一个相对路径:

Error 404 /landing.php

如果您在其中放置网址,则会出现外部重定向,并且即使网址与您的网站使用相同的网址,也不会将环境变量设置为

您似乎已经正确地执行了此操作,但我认为我会将其包含在未来的任何用户中。

答案 1 :(得分:0)

landing.php文件中:

$referer = $_SERVER['HTTP_REFERER'];

然后,您可以使用$referer var。

执行您需要的任何操作