0

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

.htaccess 似乎越来越大,这肯定是我目前无法影响的另一个问题的原因。

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

因此,一段时间后,在 Google 的索引更新和我自己对错误链接的更改过程中,当它们不再需要时,我可能能够将它们取出。有任何想法吗?

4

2 回答 2

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');
}
于 2013-04-11T11:21:26.243 回答
0

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

Apacheaccess.log应该已经跟踪请求。要查看链接是否仍在使用,您可以将其中的条目access.logRewriteMap文本文件进行比较。

为了便于比较,您还可以添加一个额外的CustomLog,仅跟踪 URL 路径

CustomLog ${APACHE_LOG_DIR}/tracker.log %U

或者

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

如果您还需要访问时间。

于 2013-04-11T12:54:34.523 回答