【问题标题】:Get usage statistic of 301 redirects [closed]获取 301 重定向的使用统计信息 [关闭]
【发布时间】:2013-04-11 10:59:26
【问题描述】:

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

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

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

因此,在 Google 的索引更新和我自己对错误链接的更改过程中,我可能会在不再需要它们时将它们取出。有什么想法吗?

【问题讨论】:

  • .htaccess 应该很小,不仅为了可读性,而且为了服务器优化。使用 php 或 cgi 来完成这项工作有什么想法?

标签: php mysql .htaccess redirect


【解决方案1】:

您应该将任何不可处理的请求重写为 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');
}

【讨论】:

    【解决方案2】:

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

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

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

    CustomLog ${APACHE_LOG_DIR}/tracker.log %U
    

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

    如果您还需要访问时间。

    【讨论】:

      猜你喜欢
      • 2014-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多