Joomla 1.6+ (эти файлы почти всегда переопределены в шаблоне, так что ищите в папке HTML шаблона)
Скрыть текстовый блок
Для статьи
Файл components\com_content\views\article\tmpl\default.php
Код

<?php 
if ($this->item->readmore_link != JRequest::getURI())
JApplication::redirect ($this->item->readmore_link,'','' ,true);
?>



Для категории
Файл components\com_content\views\category\tmpl\blog.php
Код

<?php 
$this->original_link = JRoute::_(ContentHelperRoute::getCategoryRoute(JRequest::getVar('id'),
0));
if (JRequest::getInt('start') > 0) $this->original_link .= "?start=" . JRequest::getVar('start');
$this->real_link = JRequest::getURI();
if ($this->original_link != $this->real_link) JApplication::redirect($this->original_link,'','' ,true);
?>



Для главной
файл components\com_content\views\featured\tmpl\default.php
Код

<?php
$this->original_link = "/";
if (JRequest::getInt('start') > 0) $this->original_link .= "index.php?start=" .
JRequest::getVar('start');
$this->real_link = JRequest::getURI();
if ($this->original_link != $this->real_link) JApplication::redirect($this->original_link,'','' ,true);
?>


Уборка левой страницы вылазящей при открытии url с алиасом псевдонима пункта меню.
надо добавить в файл  \html\com_content\categories\default.php следующий код

// редирект с url ссылочного пункта меню
$app = JFactory::getApplication();
$menu = $app->getMenu()->getActive();

if ($menu->type=='alias')
{
    $url = JURI::root().$menu->link.$menu->params->get('aliasoptions');
    $app->redirect(JRoute::_($url),'','' ,true);
}



Для VirtueMart 1,1 (может и на других заработает, не проверял)
Скрыть текстовый блок
Для страницы товара (Вписывать во flypage, который используется, шаблона который используется. )
Файл (примерный путь) components\com_virtuemart\themes\default\templates\product_details\flypageX.php
Код

<?php 
$productlink = $sess->url( URL."index.php?page=shop.product_details&flypage=flypage.tpl&product_id=".$product_id."&category_id=".$category_id."&option=com_virtuemart");
if (JRoute::_($productlink)!= JRequest::getURI()) JApplication::redirect(JRoute::_($productlink),'','' ,true);
?>



P.S. Если создан пункт меню на магазин (именно на магазин, а не на категорию), то нужно к ссылке по-умолчанию добавить ID этого пункта меню. В итоге будет так
Код

<?php 
$productlink = $sess->url( URL."index.php?page=shop.product_details&flypage=flypage.tpl&product_id=".$product_id."&category_id=".$category_id."&option=com_virtuemart&itemid=2");
if (JRoute::_($productlink)!= JRequest::getURI()) JApplication::redirect(JRoute::_($productlink),'','' ,true);
?>



Где 2, это ID пункта меню, который ссылается на магазин.
Если пункты меню созданы и на категории, то скорее всего работать будет не так как нужно.

Для категории (ссылка получится немного не такая, но зато одна единственная)
Файл (примерный путь) \components\com_virtuemart\themes\default\templates\browse\includes\browse_header_category.tpl.php
Код

<?php 
$this->original_link = $sess->url( URL."index.php?page=shop.browse&category_id=".$category_id."&option=com_virtuemart");
if (JRequest::getInt('start') > 0) $this->original_link .= "?start=" .
JRequest::getVar('start');
$this->real_link = JRequest::getURI();
if ($this->original_link != $this->real_link) JApplication::redirect($this->original_link,'','' ,true);
?>




Для FLEXIcontent 2.0
Скрыть текстовый блок
Для полного материала
файл components\com_flexicontent\templates\default\item.php (Где default - используемый шаблон материала)
Код

<?php 
if (JRoute::_(FlexicontentHelperRoute::getItemRoute($this->item->slug, $this->item->categoryslug))!= JRequest::getURI()) JApplication::redirect(JRoute::_(FlexicontentHelperRoute::getItemRoute($this->item->slug, $this->item->categoryslug)),'','' ,true);
?>




Для K2
Скрыть текстовый блок
Для полного материала:
файл components/com_k2/templates/default/item.php (Где default - используемый шаблон материала)
Код

<?php 
if ($this->item->link!= JRequest::getURI()) JApplication::redirect($this->item->link,'','' ,true);
?>



Для категории
components/com_k2/templates/default/category_item.php
Код

<?php
$this->original_link = JRoute::_(K2HelperRoute::getCategoryRoute(JRequest::getVar('id'),
0));
if (JRequest::getInt('start') > 0) $this->original_link .= "?start=" . JRequest::getVar('start');
$this->real_link = JRequest::getURI();
if ($this->original_link != $this->real_link) JApplication::redirect($this->original_link,'','' ,true);
?>




Для zoo. (Проверял на 2.6.6)

Скрыть текстовый блок
В нём хоть и присваивается rel="canonical", но меня не устроило, когда материал принадлежит нескольким категориям, то он имеет отдельную ссылку в каждой категории. Да и вообще склейку больше уважаю.

Для полного материала
/media/zoo/applications/blog/templates/default/item.php (Править нужно шаблон тот, который вы используете. blog и default для примера)
Код

<?php if (JRoute::_($this->app->route->item($this->item, false))!= JRequest::getURI())
JApplication::redirect (JRoute::_($this->app->route->item($this->item, false)),'','' ,true); ?>





Для JoomShopping (Пробовал на версии 3.11.4)
Скрыть текстовый блок
Если созданы пункты меню на категории, то что-то непонятное... То ли работает, то ли нет Azn Или я структуру не так настраиваю. Почти не работал с ЖШ. Тестируем, отписываемся.
Страница товара
Файл components\com_jshopping\templates\default\product\product_default.php (Ну или в Вашем шаблоне)
Код

<?php 
$productlink = 'index.php?option=com_jshopping&controller=product&task=view&category_id='.$this->category_id.'&product_id='.$this->product->product_id;
if (JRoute::_($productlink)!= JRequest::getURI()) JApplication::redirect(JRoute::_($productlink),'','' ,true);
?>



Стоит отметить, что при использовании редиректа станет невозможной передача параметров через URL. В часности не работает страница печати.

Аналогичным образом можна избавиться от дублей остальных компонентов. Коллекция будет пополняться. Не пропустите Azn

Добавлено: хак для роутера com_content проверялся на версии 2.5.4 и 2.5.7
Избавляет от дублей вида - site.ru/2 site.ru/333 и подобных (страницы нормально отдают 404)
/components/com_content/router.php
просто закомментировать строку
Код

$vars['id'] = (int)$segments[0];




Никаких мыслей по поводу “Избавление от дублей страниц”