|
Efanych
|
 |
« : 14.02.2012, 11:59:39 » |
|
Отличный способ избавления от дублей на сайте придумал пользователь TwistedAndyПринцип работы редиректа описан в теме Решение проблемы с дублями страниц в Joomla 1.5 Так же в той теме пользователь sherza написала Решение предназначено для использования со стандартным SEF. При использовании сторонних SEF корректная работа не гарантируется.В этой теме буду выкладывать решения для сторонних компонентов. Приведённый код желательно вставлять после запрета прямого доступа, если знаете синтаксис php. Если не знаете, то просто скопируйте код и вставьте в самый верх указаного файла. Файлы буду указывать системные, но часто они могут быть переопределены в шаблоне в папке HTML, тогда указаный код необходимо писать в переопределённые файлы, иначе работать не будет. Подробнее о шаблонизации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); ?> Для категории Файл 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); ?> Для VirtueMart 1,1 (может и на других заработает, не проверял) Для страницы товара (Вписывать во flypage, который используется, шаблона который используется. ) Файл (примерный путь) components\com_virtuemart\themes\ default\templates\product_details\flypage X.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) Если созданы пункты меню на категории, то что-то непонятное... То ли работает, то ли нет  Или я структуру не так настраиваю. Почти не работал с ЖШ. Тестируем, отписываемся. Страница товара Файл 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. В часности не работает страница печати.Аналогичным образом можна избавиться от дублей остальных компонентов. Коллекция будет пополняться. Не пропустите Добавлено: хак для роутера 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];
|
|
|
|
« Последнее редактирование: 10.02.2013, 00:48:11 от skai »
|
Записан
|
|
|
|
| |
|
Efanych
|
 |
« Ответ #1 : 01.03.2012, 14:26:25 » |
|
У вас в шаблоне есть папка html/com_content?
|
|
|
|
|
Записан
|
|
|
|
gadjet
Осваиваюсь на форуме
 
Репутация: +0/-3
Offline
Пол: 
Сообщений: 54
|
 |
« Ответ #2 : 01.03.2012, 14:28:24 » |
|
есть конечно) Решение от TwistedAndy не сработало у меня. Да там у многих проблемы я смотрю были. Да и ваше проще на мой взгляд. Только в чем глюк собственно млм я забыл сделать что то?
|
|
|
|
|
Записан
|
|
|
|
|
ELLE
|
 |
« Ответ #3 : 01.03.2012, 14:30:01 » |
|
есть конечно)
вот там и нужно прописывать, у вас шаблон переопределен зы. подписалась 
|
|
|
|
|
Записан
|
|
|
|
leshkoff
Осваиваюсь на форуме
 
Репутация: +0/-0
Offline
Пол: 
Сообщений: 83
|
 |
« Ответ #4 : 15.05.2012, 15:39:51 » |
|
я так смотрю + тайтл вбиваю и все всплывает (PS: пост выше обновила, ссылка на плагин) Хотя в 1.5 эта проблема уходила простым добавлением кода. Может это потому, что для списка категорий (com_content/categories) в Joomla 1.7/2.5 код пока не разработали?
|
|
|
|
|
Записан
|
|
|
|
|
Efanych
|
 |
« Ответ #5 : 15.05.2012, 15:51:22 » |
|
Для списка категорий не разработано. Но когда я первый раз ходил по тем странным ссылкам, там же был блог категории вроде. Я что ещё подумал, а вы альтернативные шаблоны не используете?
|
|
|
|
|
Записан
|
|
|
|
kman
Осваиваюсь на форуме
 
Репутация: +0/-0
Offline
Сообщений: 28
|
 |
« Ответ #6 : 14.10.2012, 22:34:06 » |
|
Добрый день! Очень просим сделать подобное решение для борьбы с дублями DJ Catalog2
|
|
|
|
|
Записан
|
|
|
|
rightmiha
Осваиваюсь на форуме
 
Репутация: +0/-0
Offline
Сообщений: 30
|
 |
« Ответ #7 : 24.10.2012, 17:41:34 » |
|
------ Поставьте или плагин от sherza Или внесите правки в Файл components\com_content\views\article\tmpl\default.php (я этим способом пользуюсь для стандартного ком_контент) Потом расскажете о результатах
Простите меня за наивные вопросы, если у меня весь контент в K2, то мне плагин ставить? Или лучше править код компонента? Плагин вылечит вот эту проблему?: http://site.ru/ohota/item/851-ohota-na-gusya http://site.ru/ohota/item/851-ohota-n http://site.ru/ohota/item/851 результат тот же, удаляй-добаляй один фиг. и вот эта конструкция http://site.ru/rybalka?start=10 если к ней добавить что угодно... http://site.ru/rybalka?start=167676768686878787 не отдает 404... я так понимаю, что здесь выход - только robots.txt Disallow: /*? так? Спасибо!
|
|
|
|
« Последнее редактирование: 24.10.2012, 17:48:11 от rightmiha »
|
Записан
|
|
|
|
|
ELLE
|
 |
« Ответ #8 : 24.10.2012, 17:50:48 » |
|
для k2 править код компонента чтоб пагинацию закрыть - да через robots.txt
|
|
|
|
|
Записан
|
|
|
|
rightmiha
Осваиваюсь на форуме
 
Репутация: +0/-0
Offline
Сообщений: 30
|
 |
« Ответ #9 : 24.10.2012, 17:57:06 » |
|
для k2 править код компонента чтоб пагинацию закрыть - да через robots.txt
в файл components/com_k2/templates/default/item.php вставил код <?php if ($this->item->link!= JRequest::getURI()) JApplication::redirect($this->item->link,'','' ,true); ?> в самый верх файла, до открывающего <?php Эффекта нет, как угодно укорачивай удлинняй урл, или просто айдишник оставляй - не отдает 404 Я только правил код, модуль не ставил. Кэш через админку чистил.
|
|
|
|
« Последнее редактирование: 24.10.2012, 18:01:02 от rightmiha »
|
Записан
|
|
|
|
|
ELLE
|
 |
« Ответ #10 : 24.10.2012, 18:04:16 » |
|
оно и не будет 404 отдавать, а должен быть 301 редирект на правильный урл у вас точно default шаблон? я к сожалению не использую k2, проверить не на чем возможно Efanych поможет чем-то
|
|
|
|
|
Записан
|
|
|
|
rightmiha
Осваиваюсь на форуме
 
Репутация: +0/-0
Offline
Сообщений: 30
|
 |
« Ответ #11 : 24.10.2012, 18:07:07 » |
|
оно и не будет 404 отдавать, а должен быть 301 редирект на правильный урл у вас точно default шаблон? я к сожалению не использую k2, проверить не на чем возможно Efanych поможет чем-то
ну, может он и редиректит...но в строке урла так и остается корявая ссылка. Шаблон сайта не дефолтный, шаблон K2 (K2 v2.5.7) item.php из коробки дефолтный. PS: Нашел еще одно руководство: http://joomlaforum.ru/index.php/topic,200322.msg1060006.html#msg1060006
|
|
|
|
« Последнее редактирование: 24.10.2012, 18:30:18 от rightmiha »
|
Записан
|
|
|
|
|
Efanych
|
 |
« Ответ #12 : 24.10.2012, 18:23:04 » |
|
в файл components/com_k2/templates/default/item.php вставил код Посмотрите, нет ли аналогичного файлика в папке HTML вашего шаблона.
|
|
|
|
|
Записан
|
|
|
|
rightmiha
Осваиваюсь на форуме
 
Репутация: +0/-0
Offline
Сообщений: 30
|
 |
« Ответ #13 : 24.10.2012, 18:33:43 » |
|
Посмотрите, нет ли аналогичного файлика в папке HTML вашего шаблона.
Нет там файла нет, вот тут вот : Увидел еще один шаг, который я не делал, но проблема у меня такая же как у человека, хотя версия выше чем 2.5 шаг: http://joomlaforum.ru/index.php/topic,200322.msg1060006.html#msg10600062) Добавляем строчки в файле /components/com_k2/k2.php (Только для К2, не выше 2.4.1. - В Версии 2.5.+ этот вопрос решен - именно оттуда и взял дополнительное условие). После текста: Код: if (JFile::exists(JPATH_COMPONENT.DS.'controllers'.DS.$controller.'.php')) { require_once (JPATH_COMPONENT.DS.'controllers'.DS.$controller.'.php'); $classname = 'K2Controller'.$controller; $controller = new $classname(); $controller->execute(JRequest::getWord('task')); $controller->redirect(); } Добавляем строчку: Код: else { JError::raiseError(404, JText::_('K2_404')); }
|
|
|
|
|
Записан
|
|
|
|
|
Efanych
|
 |
« Ответ #14 : 24.10.2012, 19:53:21 » |
|
проблема у меня такая же как у человека, хотя версия выше чем 2.5 Если урл: http://site.ru/rybalka/item/226-zimnyaya-ryibalka-nachinayuschim отображает ту же самую страницу по адресам: то там другая проблема. Для проверки, тот ли вы файлик правите, поменяйте какой-нибуть класс дива и посмотрите, отобразятся ли изменения на сайте.
|
|
|
|
|
Записан
|
|
|
|
rightmiha
Осваиваюсь на форуме
 
Репутация: +0/-0
Offline
Сообщений: 30
|
 |
« Ответ #15 : 24.10.2012, 21:25:53 » |
|
Еслито там другая проблема.
Для проверки, тот ли вы файлик правите, поменяйте какой-нибуть класс дива и посмотрите, отобразятся ли изменения на сайте.
Гениально!  ВСе работает, оказалось файлы были еще и в самом шаблоне сайта, очень глубоко закопаны. После того как я просто удалил файл по адресу: components\com_k2\templates\default\item.php сайт продолжил работу...как будто ниче и не удалялось. пустил поиск по директориям -нашел еще шаблоны k2 следовательно, заменил - все работает! Спасибо, Efanych !
|
|
|
|
|
Записан
|
|
|
|
ostrova
Осваиваюсь на форуме
 
Репутация: +0/-0
Offline
Сообщений: 41
|
 |
« Ответ #16 : 04.11.2012, 00:22:48 » |
|
Здравствуйте! Подскажите, а то сомневаюсь, в нужном ли направлении ищу...
У меня стоит модуль "Похожие материалы" и почему-то именно если с него перейти на главную страницу (она у меня называется Приветствие), то сслыка имеет вид не сайт.ру, а сайт.ру/stati/2-uncategorised/1-privetstvie.... stati - это пункт меню....
Вопрос: это тоже дубль, как от него избавиться? Как сделать так, чтобы, щелкая по пункту Приветствие в "Похожих материалах" человек попадал бы на сайт.ру, а не на сайт.ру/stati/2-uncategorised/1-privetstvie.
Что пробовалось: в Joomla есть компонент перенаправление. Так вот там сайт.ру/stati/2-uncategorised/1-privetstvie перенаправила на сайт.ру, но никаких изменений. (Кэш чищен)
Подскажите кто чем может!! Спасибо!
|
|
|
|
|
Записан
|
|
|
|
HiopsNerevar
Завсегдатай
   
Репутация: +63/-0
Offline
Пол: 
Сообщений: 601
Я удобный.
|
 |
« Ответ #17 : 04.11.2012, 19:51:18 » |
|
Joomla 2.5 и PhocaGallery 3.2.1 и включен стандартный SEF Имеется вот такой robots.txt(не менялся уже долгое время) User-agent: * Disallow: /administrator/ Disallow: /cache/ Disallow: /components/ Disallow: /component/ Disallow: /includes/ Disallow: /language/ Disallow: /libraries/ Disallow: /logs/ Disallow: /media/ Disallow: /modules/ Disallow: /plugins/ Disallow: /templates/ Disallow: /tmp/ Disallow: /xmlrpc/ Disallow: /*com_mailto Disallow: /*pop= Disallow: /*lang=ru Disallow: /*format= Disallow: /*?phocadownload* Disallow: /*?phocaslideshow* Disallow: /*print= Disallow: /*task=vote Disallow: /*=watermark Disallow: /*=download Disallow: /*user/ Disallow: /404 Disallow: /*tag Disallow: /*.pdf Disallow: /*.swf Disallow: /*print=1 Disallow: /*=atom Disallow: /*=rss Однако Яндекс с завидным постоянством пополняет список "Документ запрещен в файле robots.txt" ссылками вида /index.php?option=com_phocagallery&view=category&id=140:liiga&Itemid=165 /component/phocagallery/140-liiga/detail/2929-avtorskij-risunok.html?Itemid=165 /component/phocagallery/196-ruth-thompson/detail/3357-avtorskij-risunok.html?phocadownload=1&Itemid=162 Стоит плагин NOdoubles от Sherza однако при включении редиректа для фоки данные страницы выдают Ошибка 310 (net::ERR_TOO_MANY_REDIRECTS): Обнаружено слишком много переадресаций. Подскажите как с этим бороться? А то идей совсем нет а страницы все пребывают и пребывают.
|
|
|
|
|
Записан
|
|
|
|
|
Efanych
|
 |
« Ответ #18 : 14.11.2012, 17:09:25 » |
|
Добавил код склейки дублей для zoo
|
|
|
|
|
Записан
|
|
|
|
|
Efanych
|
 |
« Ответ #19 : 15.11.2012, 21:10:56 » |
|
И для JoomShopping
|
|
|
|
|
Записан
|
|
|
|
alex_volkhov
Захожу иногда

Репутация: +0/-0
Offline
Пол: 
Сообщений: 10
|
 |
« Ответ #20 : 16.11.2012, 11:26:10 » |
|
Подскажите - тестирую роутер вот отсюда: http://joomlaforum.ru/index.php/topic,205086.msg1080752.html#msg1080752 По сути - он создает красивые ссылки в нужном формате, добавляя их к уже существующим в VirtueMart
Вопросы знатокам: 1) если использовать этот хак - он может заменить все ссылки на те, которые генерит роутер? 2) у меня сайт проиндексирован - страницы не пропадут из поиска, меня будут находить по старым ссылкам? 3) так и не понял - так что устанавливать, только решение, от TwistedAndy, только плагин от sherza, или и то, и другое?
|
|
|
|
|
Записан
|
|
|
|
klara7
Давно я тут
  
Репутация: +2/-1
Offline
Пол: 
Сообщений: 268
|
 |
« Ответ #21 : 01.12.2012, 15:58:04 » |
|
Efanych, скажите, пожалуйста, у меня после правки файла item.php в папках шаблона и components/com_k2/templates/default/ ситуация так и не решилась. Я заметила, что еще куча файлов с такими же названиями в папках: - components/com_k2/views/item/tmpl - components\com_k2\controllers - components\com_k2\models - components/com_k2/models Может быть эти файлы тоже нужно править? Или лучше не трогать, как считаете?
|
|
|
|
|
Записан
|
|
|
|
|
beagler
|
 |
« Ответ #22 : 09.12.2012, 11:58:52 » |
|
Нашел у себя еще один дубль. На домене есть почта и по адресу mail.site.ru получаем полный дубль. убираем в .htaccess домена: RewriteCond %{HTTP_HOST} ^mail\.site\.ru$ [NC] RewriteRule ^(.*)$ http://www.site.ru/$1 [R=permanent,L]
|
|
|
|
|
Записан
|
|
|
|
|
Maxum
|
 |
« Ответ #23 : 15.12.2012, 05:46:37 » |
|
Редирект не желает работать при включённом кэше (Общие настройки - Система - "Стандартное" или "Прогрессивное" кэширование). Ни коды, добавленные в соответствующие файлы, ни плагин. Может открыться материал, у которого вместо названия будет заголовок пункта меню, или открыться Главная страница, а внизу у неё будет добавлена статья, на которую и должна была произойти переадресация. Отключаю кэш - переадресация работает. Проверялось на разных шаблонах, в том числе на чистом дефолтном.
|
|
|
|
|
Записан
|
|
|
|
|
StyleRocket
|
 |
« Ответ #24 : 19.12.2012, 12:28:56 » |
|
Я правильно понял для JoomShoopping надо использовать код и вставить его вверх файла? Плагин не устанавливать! Код прописал, некоторые страницы которые дубли, начали ссылаться на актуальный URL))
|
|
|
|
|
Записан
|
|
|
|
|
StyleRocket
|
 |
« Ответ #25 : 19.12.2012, 23:59:21 » |
|
использовал данный код для редиректа дублей товаров в JoomShopping, отлично вроде справляется! Избавляюсь от дублей типа shop/product/view/ Теперь вопрос, стоит ли удалить из robots.txt Disallow: */product/view/ Disallow: */category/view/ ? Как просто работает ПС? что в приоритете? т.е. проверяя ссылку она видит первым делом редирект и индексирует ссылку на которую был совершен редирект или все-же первым делом проверяет robots.txt и сразу блокирует?
и еще для категорий работает, просто поменял у категорий алиасы?
|
|
|
|
« Последнее редактирование: 20.12.2012, 00:02:50 от StyleRocket »
|
Записан
|
|
|
|
|
ELLE
|
 |
« Ответ #26 : 20.12.2012, 00:19:35 » |
|
ПС не узнают о редиректе, если страница закрыта в роботс...ну Яндекс точно не узнает
редирект только для карточки, для категории отдельно надо составлять, по аналогии
|
|
|
|
|
Записан
|
|
|
|
|
StyleRocket
|
 |
« Ответ #27 : 20.12.2012, 00:38:20 » |
|
Есть такая ссылка, точнее была site.ru/shop/product/view/4/1165 теперь она редиректится на http://site.ru/muzhskaya-odezhda/muzhskie-dzhinsy/dzhinsy-takugong-1699 Вроде так должен работать!? Значит теперь удалять Disallow: */product/view/ тем самым оставить доступ для индексации, но уже из Яндекса клиент просто перейдет по редиректу, верно?
|
|
|
|
« Последнее редактирование: 20.12.2012, 00:45:40 от StyleRocket »
|
Записан
|
|
|
|
|
ELLE
|
 |
« Ответ #28 : 20.12.2012, 00:40:25 » |
|
Да, НО 1. проверить отдает ли именно 301 редирект. 2. убедиться все ли корректно работает
|
|
|
|
|
Записан
|
|
|
|
|
StyleRocket
|
 |
« Ответ #29 : 20.12.2012, 00:46:50 » |
|
Я просто немного не пойму, лучше делать редирект или закрывать в robots.txt, во втором случае, если я правильно понял, ПС блокирует ссылки которые ранее были добавлены в индекс и со временем просто их удаляет САМА, а уже новые добавляются? Добавляя новые, правильные ссылки ПС не посчитает что это дубль уже проиндексированной /product/, НО уже закрытые мной в robots.txt
Как сделать проверку? Вроде перехожу по ранее индексированной ссылке от /product/, и принимает вроде нормальный вид ссылка, иными словами 301 работает!
|
|
|
|
|
Записан
|
|
|
|
|