我正在尝试将人们可能登陆的不存在的文件重定向到特定文件(landing.php),但我也想为这些 404 情况记录一个引荐来源...那我该怎么做呢?
现在,我的 .htaccess 文件中有一个简单的 ErrorDocument 404 /landing.php 条目,但是当用户登陆自定义登录页面时,我如何/在哪里实际捕获用户来自的引荐来源网址(将会有其他常规访问者来到landing.php页面,所以我不能只记录该页面的所有引荐来源,所以有没有办法只分离404流量?)
我正在尝试将人们可能登陆的不存在的文件重定向到特定文件(landing.php),但我也想为这些 404 情况记录一个引荐来源...那我该怎么做呢?
现在,我的 .htaccess 文件中有一个简单的 ErrorDocument 404 /landing.php 条目,但是当用户登陆自定义登录页面时,我如何/在哪里实际捕获用户来自的引荐来源网址(将会有其他常规访问者来到landing.php页面,所以我不能只记录该页面的所有引荐来源,所以有没有办法只分离404流量?)
您不能依赖可用的推荐人,因为人和软件可以轻松地对其进行调整。根据我的经验,大多数人不会这样做,所以它仍然值得跟踪,只需确保在使用前检查它是否已设置。
当您像您一样使用 ErrorDocument 指令时,Apache 将设置可在 $_SERVER 数组中访问的 REDIRECT_STATUS 环境变量,并将包含 HTTP 状态代码。
if (!empty($_SERVER['REDIRECT_STATUS']) && $_SERVER['REDIRECT_STATUS'] == '404') {
if (!empty($_SERVER['HTTP_REFERER'])) {
// Log the referer
}
}
注意:我看到有些人说这并不总是有效,但我无法找到触发设置环境变量的原因。
更新
根据Apache 手册,仅当您使用本地 URL 时才会设置这些环境变量。这意味着您应该在 ErrorDocument 404 指令中提供相对路径:
Error 404 /landing.php
如果您将 URL 放在那里,则会发生外部重定向,并且即使该 URL 使用与您的站点相同的域,也不会设置环境变量。
看来您已经正确执行了此操作,但我认为我会为任何未来的用户提供此功能。
在您的landing.php
文件中:
$referer = $_SERVER['HTTP_REFERER'];
$referer
然后你可以用var做任何你需要的事情。