Открываем в любимом редакторе (мой - Geany) components\com_content\router.php и вносим небольшие изменения:
В функции ContentBuildRoute(&$query) меняем строку 27
$advanced = $params->get('sef_advanced_link', 0);
на
$advanced = $params->get('sef_advanced_link', 1);
В функции ContentParseRoute($segments) меняем строку 208
$advanced = $params->get('sef_advanced_link', 0);
на
$advanced = $params->get('sef_advanced_link', 1);
Закомментируем строки 228-232:
/*
if (strpos($segments[0], ':') === false) {
$vars['view'] = 'article';
$vars['id'] = (int)$segments[0];
return $vars;
}*/
И все.
Для начала, если посмотреть на строки 27 и 208, то видно, что в компоненте используется параметр sef_advanced_link , которому по-умолчанию присваивается значение 0. Этот параметр нигде в админке не встречается - можно сделать вывод, что создатели Жумлы все это предусмотрели, но не успели оттестировать, и потому не включили в релиз. По этой причине, данный параметр всегда указывает, что опция скрытия ID в URL всегда выключена. Мы ее включили принудительно. Кстати, если по уму, то стоило просто добавить этот параметр в administrator\components\com_content\config.xml и он бы попал в админку.
От строк 228-232 зависит появится ли ошибка при открытии категории без ID в URL. Тесты показали, что если эти строки оставить как есть (не комментировать), то страницы статей грузятся без проблем, а вот страницы категорий вызывают возникновение ошибки 404. Так что решение в этом случае - закомментировать от греха подальше.