Как автоматически добавлять атрибут rel="nofollow" ко всем внешним ссылкам?

Тема в разделе "PHP Pro", создана пользователем bvb, 27 окт 2010.

Статус темы:
Закрыта.
  1. bvb

    bvb

    Регистр.:
    17 май 2009
    Сообщения:
    190
    Симпатии:
    34
    Возможно ли такое и каким способом это можно сделать?
     
  2. propovednik

    propovednik Постоялец

    Регистр.:
    16 май 2008
    Сообщения:
    104
    Симпатии:
    21
    Извините, конечно, но вопрос из разряда "где находится кнопочка 'сделать все з***сь'" :) Добавлять атрибут нужно где и как? В визуальном редакторе? При добавлении материала на сайт? При открытии странички? На чем ваш проект? Какая CMS? Есть ли фреймворк, в котором есть хуки-перехватчики навроде OnBeforeContentOutput и т.п.?
     
  3. bvb

    bvb

    Регистр.:
    17 май 2009
    Сообщения:
    190
    Симпатии:
    34
    Движок самописный. Может к bbcode прикрутить?
    UPD: сделал в bbcode
     
  4. trooll

    trooll PHP кодер

    Регистр.:
    22 дек 2008
    Сообщения:
    503
    Симпатии:
    116
    Давайте начнем с того что вы создали топик не в том раздели, для подобных тем я думаю более подходит раздел:
    https://www.nulled.cc/forumdisplay.php?f=214
    Теперь по сабжу:
    Логика обработки:
    Перед тем как принтить HTML результат в браузер, добавить параметр rel="nofollow" к текгам <a></a> у которых параметр href="" не содержит site.com (где site.com доменное имя вашего сайта) или не начинается с символа "/" .
     
  5. Sammerset

    Sammerset Постоялец

    Регистр.:
    14 сен 2008
    Сообщения:
    136
    Симпатии:
    10
    Или парсер влепить на выходе по этим условиям. (я так делал на RubyOnRails)
     
  6. Inviseble_Demon

    Inviseble_Demon

    Регистр.:
    11 дек 2008
    Сообщения:
    482
    Симпатии:
    350
    Нет зачем ?!
    Тогда уж как в DLE при постинге обработку делать...
    Все равно весь контент идет через редактор (покрайней мере должно быть так )) )
    А постоянно напрегать сервак переработкой вывода это бред...
    С уже имеющимся делов на 5 мин. открываем notepad++ и регуляркой правим и перезаливаем таблицу - вуаля.
     
  7. FaLL3N

    FaLL3N Постоялец

    Регистр.:
    4 дек 2006
    Сообщения:
    100
    Симпатии:
    17
    Самое простое решение - без правки скриптов, при условии что свои ссылки не начинаются с 'http://'
    Файл 'backlinks_replace.php'
    PHP:
    <?php
    if(ob_get_level()==0ob_start();
    register_shutdown_function('replace_out_href');
    function 
    replace_out_href(){
    $outHtml=ob_get_contents();
    ob_clean();
    //echo preg_replace('/href="(http:\/\/.*?)"/','href="/redirect.php?to=$1"',$outHtml); -- перенаправление через свой редиректор
    echo preg_replace('/href="(http:\/\/.*?)"/','href="$1" rel="nofollow"',$outHtml);

    }
    ?>
    Вариант когда «параметр href="" не содержит site.com (где site.com доменное имя вашего сайта) или не начинается с символа "/"»
    PHP:
    <?php
    if(ob_get_level()==0ob_start();
    register_shutdown_function('replace_out_href');
    function 
    replace_out_href(){
    $outHtml=ob_get_contents();
    ob_clean();
    echo 
    preg_replace_callback('/href="(.*?)"/','check_and_replace',$outHtml);

    }
    function 
    check_and_replace($var){
    if(
    $var[1][0]=='/'|| (strpos($var[1],'site.com')!==false) ) return $var[0];
    else return 
    'href="'.$var[1].'" rel="nofollow"';
    }
    ?>
    И в .htaccess добавить запись
    Код:
    <FilesMatch "\.(php|php3|phtml)$">
    php_value auto_prepend_file /полный/путь/к файлу/backlinks_replace.php
    </FilesMatch>
    
     
Статус темы:
Закрыта.