获取301重定向的使用情况统计信息

时间:2013-04-11 10:59:27

标签: php mysql .htaccess redirect

我正在使用Google的网站站长工具以及一些手工制作的脚本,将404记录到数据库中以获取所有错误的链接,并将结果放入我的.htaccess文件中更正的301重定向。

似乎.htaccess的成长和增长,这肯定是另一个我目前无法影响的问题的原因。

我想知道(为了保持.htaccess的大小尽可能小以便于阅读),是否有工具或任何方法来跟踪这些重定向的使用情况?!

所以过了一段时间我可能会在他们不再需要的时候把它们拿出来,在Googles索引更新和我自己对错误链接的更改过程中。有什么想法吗?

2 个答案:

答案 0 :(得分:2)

您应该将任何不可记录的请求重写为PHP脚本来处理这个问题,然后您就可以对数据执行任何操作。

在你的.htaccess添加中(在你有任何其他重写规则之后):

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .* /404.php?uri=$0 [L]

404.php做类似的事情(半伪代码):

// Get the redirect mapping for this URI from the database
$query = "
    SELECT location
    FROM redirects
    WHERE uri = ?
";
$redirect = $db->query($query, $_GET['uri']);

if ($redirect) {
    // Update database with tracking data
    $query = "
        UPDATE redirects
        SET
          hits = hits + 1,
          lastHit = NOW()
        WHERE uri = ?
    ";
    $db->query($query, $_GET['uri']);

    // Do the redirect
    header($_SERVER['SERVER_PROTOCOL'] . ' 301 Moved Permanently');
    header('Location: ' . $redirect);
} else {
    // Really not found
    header($_SERVER['SERVER_PROTOCOL'] . ' 404 Not Found');
}

答案 1 :(得分:0)

为了保持.htaccess较小,您可以使用RewriteMap,例如txtdbm

Apache access.log应该已经跟踪了请求。要查看,如果仍然使用这些链接,您可以将access.log中的条目与RewriteMap文本文件进行比较。

为了便于比较,您还可以添加其他CustomLog,仅跟踪网址路径

CustomLog ${APACHE_LOG_DIR}/tracker.log %U

CustomLog ${APACHE_LOG_DIR}/tracker.log "%U %t"

如果您还需要访问时间。