2013-04-11 2 views
0

Я использую Инструменты для веб-мастеров Google, а также некоторый скрипт ручной работы, который регистрирует 404s в БД, чтобы получить все неправильные ссылки и помещать результаты в исправленный 301-редирект в моем .htaccess-файле.Статистика использования 301 переадресации

Похоже, что .htaccess растет и растет, что, безусловно, связано с другой проблемой, на которую я не могу влиять в данный момент.

Мне было интересно, хотя (чтобы сохранить размер .htaccess как можно меньше для удобочитаемости), есть ли инструмент или какой-либо метод для отслеживания использования этих перенаправлений ?!

Так что через некоторое время я смогу вытащить их, когда они больше не понадобятся, в ходе обновления индекса Google и моих собственных изменений на неисправные ссылки. Есть идеи?

+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

0

Для поддержания .htaccess small, вы можете использовать RewriteMap, см., например, txt или dbm.

Apache access.log должен уже отслеживать запросы. Чтобы увидеть, если ссылки все еще используются, вы можете сравнить записи в access.log с текстовым файлом RewriteMap.

Для облегчения сравнения, вы можете также добавить дополнительный CustomLog, отслеживая только адрес тракту

CustomLog ${APACHE_LOG_DIR}/tracker.log %U 

или

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

, если вам нужно время доступа, а также.

Смежные вопросы