Страница 404 и VirtueMart 2
При попытке вызова страницы с несуществующей категорией или товаром VirtueMart 2 не выдает страницу ошибки 404. Связано это с особенностями реализации роутера. Но для целей СЕО желательно, чтобы на отсутствующие страницы VirtueMart реагировал выдачей стандартной страницы 404.
Здесь рассматривается случай с VirtueMart 2.0.18a, но решение актуально и для других версий. Это частное решение в моем случае работает для категорий и товаров, для других элементов, возможно, нужные дополнительные изменения.
В файле /componetns/com_virtuemart/router.php ищем функцию virtuemartParseRoute, в конце функции последний блок if-else, строки (~597)
} elseif (!$helper->use_id && ($helper->activeMenu->view == 'category' ) ) {
$vars['virtuemart_category_id'] = $helper->getCategoryId (end($segments) ,$helper->activeMenu->virtuemart_category_id);
$vars['view'] = 'category' ;
Делаем следующие изменения:
} elseif (!$helper->use_id && ($helper->activeMenu->view == 'category' ) ) {
JError::raiseError(404, JText::_("Page Not Found"));
Дальше, ищем строки:
} else {
$vars['view'] = $segments[0] ;
if ( isset($segments[1]) ) {
$vars['task'] = $segments[1] ;
}
Меняем так:
} else {
JError::raiseError(404, JText::_("Page Not Found"));
}