Хак Seo Redirect Url (redirect?url=) для InstantCms2

3480
Вы тоже по ночам не спите, ломая голову как закрыть внешние ссылки от индексации что-бы показатели сайта не утекали к реципиентам и сайт потерял привлекательность для спамеров?
crazy Тогда мы идем к вам....
Не секрет, что у двойки есть встроенный редирект, но только для данных введенных через поле типа url, а в остальном... as is или остается как есть, если ссылка вставлена без тегов, или преобразуется в активную, если использована полная нотация при вставке. А, еще можно включить типограф который автоматически преобразует "плоские" ссылки в "кликабельные" Стоп! Преобразует...
glasses

Текст введенный в поле редактора может сохранятся в базу данных as is, а может обрабатываться типографом по заранее заданным правилам.
Вот их то мы сейчас и добавим.
Открываем файл system/controllers/typograph/hooks/html_filter.php
Код PHP:
  1.  
  2.  
  3. // Отключаем типографирование в определенном теге
  4. //было
  5. //$jevix->cfgSetTagNoTypography('code','pre','youtube', 'iframe');
  6.  
  7. //стало, теперь мы сами будем препарировать и собирать обратно тег а
  8. $jevix->cfgSetTagNoTypography('code','pre','youtube', 'iframe', 'a');
  9.  
  10. // Ставим колбэк для youtube
  11. $jevix->cfgSetTagCallback('youtube', array($this, 'parseYouTubeVideo'));
  12.  
  13. // Добавляем колбэк для ссылок тега а
  14. $jevix->cfgSetTagCallbackFull('a', array($this, 'seoRedirect'));
  15.  
  16. return $jevix;
  17.  
  18. }
  19.  
И еще чуть чуть индусского кода joke сам метод вызываемый в колбэке

Код PHP:
  1.  
  2. public function seoRedirect($tag, $url, $content){
  3. // вытягиваем из массива ссылку
  4. foreach($url as $value){
  5. $link = $value;
  6. }
  7. // препарируем ее на части
  8. $link_data = parse_url($link);
  9. // собираем препарированные части в линк без пути
  10. $out_link = $link_data['scheme'].'://'. $link_data['host'];
  11. // проверяем на совпадение с нашим доменом
  12. if($out_link == href_to_home()){
  13. // если внутренняя ссылка
  14. $href = $out_link . $link_data['path'] ;
  15. }else{
  16. // если внешняя, то добавляем редирект
  17. $href = href_to_home() . '/redirect?url=' . $out_link . $link_data['path'] ;
  18. // контрольный в голову, что б уж наверняка
  19. $rel = 'rel="nofollow" ';
  20.  
  21. }
  22. // собираем запчасти в кучу и отдаем назад
  23. $code .= '<a '.$rel.'href="' .$href. '">'.$content.'</a>';
  24. return $code;
  25. }
  26.  
  27.  
Что, куда и зачем более-менее откомментированно в коде. Для комментариев это уже работает сразу после внесения изменений в код. Для остального, надо включить для типов контента, поле ввода - обрабатывать типографом.
а, ну еще в файле robots.txt не забыть добавить директиву Disallow: /redirect?url=*

Все, можно спать спокойно dance v smoke

p.s. Спасибо и благодарности принимаются и на R130659251525 или Z181789078750 в том числе. Ну на лекарствах жеж сэкономили ?!...
p.p.s. C блекджеком и шлюхами плюшками ? Возможно будет, в виде компонента. Позже...
Один сайдбар? А может два? Слева или справа?
Комментарии (19)
Игорь Lu 13 марта 2015 в 15:53 +10
На заметку разработчикам ИнстантЦМС, нужная вещь и достойна присутствия в следующих обновлениях.
VonKruger 14 марта 2015 в 13:09 0
Ничего не изменилось! Ссылки как были так и остаались без редиректа.
Mr.Andreius 14 марта 2015 в 13:18 -1
Очень информативности sad по типу "шеф усе пропало..."
Нил™ 14 марта 2015 в 20:27 +1
двойкой не пользуюсь. поставил плюс за драматургию поста))
lesterkey 15 марта 2015 в 00:17 +1
+ scratch (А как бы еще, что б все открывалось в новом окне???/
Mr.Andreius 15 марта 2015 в 00:34 0
target="_blank"

Код PHP:
  1.  
  2. // контрольный в голову, что б уж наверняка
  3. $rel = 'rel="nofollow" ';
  4. // открывать в новом окне
  5. $target = ' target="_blank"';
  6.  
Код PHP:
  1.  
  2. // собираем запчасти в кучу и отдаем назад
  3. $code .= '<a '.$rel.'href="' .$href. '"'.$target.'>'.$content.'</a>';
  4.  
или просто дописать в конец открывающего тега
Код PHP:
  1.  
  2. // собираем запчасти в кучу и отдаем назад
  3. $code .= '<a '.$rel.'href="' .$href. '" target="_blank">'.$content.'</a>';
  4.  
VonKruger 15 марта 2015 в 17:37 0
Если автору комментарий не понравился он ставит в карму профиля минус! За что, что я такого написал? Ну если не работает, так она на работает без использования форматирования! А нужно чтобы работала и так!
Mr.Andreius 15 марта 2015 в 20:13 -1
Ух ты как...
По порядку:

Мое право что, когда и кому ставить.

В описании хака так и написано черным по белому "для комментариев работает сразу, для остального - включить типографирование полей ввода в типах контента" .

И если человек не читает инструкций, то кто ему доктор???
А потом огульно обвиняет в неработающем хаке, то кто ему доктор в двойне???
А потом обижается за слив кармы, то кто ему доктор втройне???

Если нужно, так возьми и доделай. Я то тут причем? Если сам не умеешь, то хотя бы объясни "человеческим языком" что тебе надо, а не выставляй претензии или требования. (За примером далеко ходить не надо. См. комменты выше.)

Хак (любой), на то и хак, что он решает всех проблем и потребностей, выложен as is, не нравится проходим мимо.
SALIK 3 декабря 2015 в 09:36 0
Дак в комментариях и не работает
Олег Васильевич я 15 марта 2015 в 22:56 +1
Если автору комментарий не понравился он ставит в карму профиля минус!
Правильное замечание: автор должен в таком случае дарить цветы. laugh
AlexTWinner 19 марта 2015 в 14:07 +1
нужная вещь, спасибо!
Буду ждать когда это будет компонентом joke
Demet 17 апреля 2015 в 17:05 +1
В ссылках подобной этой "/index.php?route=product/product&path=85_86&product_id=523" обрезаются в комментариях до "/index.php", простые как на данной странице "/raz-dva-tri-chetyre-pjat-nachinaem-kovyrjat/hak-seo-redirect-url-redirect-url-dlja-instantcms2.html" идут нормально. В чем может быть проблема?
Mr.Andreius 23 апреля 2015 в 11:23 0
хм... проблема (вернее это ее стандартое поведение) в функции parse_url($link)
посмотрю, что можно сделать с сылками параметрического типа
Старый балбес 23 апреля 2015 в 19:01 0
Demet:
В ссылках подобной этой "/index.php?route=product/product&path=85_86&product_id=523"
Опенкартовкий роутер не перепутаеш ни счем! Я отказался от раутинга, все выполняю на контроллерах!
Mr.Andreius 27 апреля 2015 в 17:41 0
Геннадий Иванович, не факт, что Demet использует скрипт магазина. Возможно юзвери постят у него ссылки, а он с этим борется ;)
Demet 27 апреля 2015 в 21:20 0
Эти ссылки кидают пользователи друг другу в комментах на тот или иной товар на маркете, а в конечном итоге получают главную страницу маркета. Еще в вашем хаке есть один неприятный момент, когда закрываю ссылку редиректом в теле поста, то вставленный через redactor видеоролик с ютуб выводится в неприглядном маленьком размере, видимо его так типограф кастрирует.
Mr.Andreius 8 мая 2015 в 13:43 0
C ютубом хак не взаимодействует, а вот типограф сам по себе - да.
Demet 8 мая 2015 в 14:15 0
А мимо типографа редирект пустить не получится?
ivanish 20 мая 2016 в 14:12 0
Отвалилось на 2.5

Ругается на // собираем запчасти в кучу и отдаем назад
$code .= '<a '.$rel.'href="' .$href. '">'.$content.'</a>';
return $code;
}


Что поправить, подскажите