Простого способа это сделать - нет. Так как вы хотите убрать якорь из маршрута, который придает ему уникальность по сравнению с другими урлами на сайте. Будет необходимо влазить в глубины маршрутизации. Ну и конечно все URL_имена категорий перечислять в маршруте к категории и товару.
Если с категориями все не так сложно, можно видоизменить маршрут
//Просмотр категории продукции
$routes[] = new \RS\Router\Route('catalog-front-listproducts', array(
'/catalog/{category}/',
'/catalog/'
), null, t('Просмотр категории продукции'));
Примерно таким образом (перечислив все идентификаторы категорий, чтобы обойти конфликты с другими маршрутами):
//Просмотр категории продукции
$routes[] = new \RS\Router\Route('catalog-front-listproducts', array(
'/{category:(demo-produkty|elektronika)}/',
'/catalog/'
), null, t('Просмотр категории продукции'));
То с формированием Урлов для товара придется переделать его стандартный маршрут, примерно на такой:
//Карточка товара
$routes[] = new \RS\Router\Route('catalog-front-product',
'/{category:(demo-produkty|elektronika)}/{id}/', null, t('Карточка товара'));
И переделать метод getUrl у объекта \Catalog\Model\Orm\Product, необходимо дописать передачу
параметра category в маршрут, так как стандартно там передается только id
Но правда могут повылазить проблемы в непредсказуемых местах, ну и производительность будет немного меньше, если у вас слишком много категорий, так что пробуйте.
На практике мы делали однажды подобную работу для одного клиента, выгоды никакой не получили абсолютно для поисковой выдачи.