Страница 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")); }