2013-04-11 56 views
0

我正在使用Google的網站管理員工具以及一些手動腳本,它將404s記錄到數據庫中以獲取所有錯誤的鏈接,並將結果寫入我的.htaccess文件中的301重定向。獲取301重定向的使用統計信息

看來,.htaccess的增長和增長,這肯定是從目前我不能影響的另一個問題的原因。

雖然我在想(爲了提高可讀性,爲了保持.htaccess的大小盡可能小),是否有工具或任何方法來跟蹤這些重定向的使用?

所以過了一段時間,我可能能夠在他們不再需要的時候將它們取出,在谷歌索引更新和我自己對錯誤鏈接的更改過程中。有任何想法嗎?

+0

'.htaccess'不僅應該小到可讀性,還要服務器優化。使用php或cgi來完成這項工作有什麼想法? – 2013-04-11 11:09:50

回答

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'); 
} 
+0

真是個好主意! – Anonymous 2013-04-11 11:26:20

0

爲了保持.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" 

,如果你需要的訪問時間爲好。