nofollow к внешним ссылкам viewtopic.php

Started by ler on 2013-07-31 07:22 — 29 replies, 6523 views

#1
Вот создал такую функцию. Помогите допилить. Проблема в том что если в посте будут и внешние и внутренние ссылки, то nofollow не добавится
function rel2nofollow($s){
if(!stristr($s,'http://мойтрекер.ru') AND !stristr($s,'http://мойсайт2.ru') AND !stristr($s,'http://мойсайт3.ua')){
$s = str_replace('<a','<a rel="nofollow"',$s);
return preg_replace('/(<a .*?href=\")([^>]+?)/i', '$1/out.php?url=$2', $s);
}
else return $s;
}
Нужно составить регулярное выражение на поиск ссылок <a>...</a> в переменной $message. Все совпадения добавить в массив. Форычить массив и к каждому значению применить функцию rel2nofollow
#2
Вася, дык сделай это в массиве и церез цикл прогони.
#3
Дык я застрял на составлении регулярного выражения
#4
Вообще я бы сделал не во viewtopic скорее бы вписал "это" в bb_code в генерацию ссылок
#5
В config.php
$bb_cfg['allowed_url'] = array('URL1','URL2',...,'URLn');
includes/bb_code.php
Найти
function init_replacements ()
    {
Вставить после
global $bb_cfg;
Найти
            "#\[url\](https?://$url_exp)\[/url\]#isu"                => '<a href="$1" class="postLink">$1</a>',
            "#\[url\](www\.$url_exp)\[/url\]#isu"                    => '<a href="http://$1" class="postLink">$1</a>',
            "#\[url=(https?://$url_exp)\]([^?\n\t].*?)\[/url\]#isu"  => '<a href="$1" class="postLink">$2</a>',
            "#\[url=(www\.$url_exp)\]([^?\n\t].*?)\[/url\]#isu"      => '<a href="http://$1" class="postLink">$2</a>',
Заменить на
            "#\[url\](https?://$url_exp)\[/url\]#isu"                => (in_array(parse_url('$1',PHP_URL_HOST),$bb_cfg['allowed_url'])) ? '<a href="$1" class="postLink">$1</a>' : '<a rel="nofollow" href="$1" class="postLink">$1</a>',
            "#\[url\](www\.$url_exp)\[/url\]#isu"                    => (in_array(parse_url('http://$1',PHP_URL_HOST),$bb_cfg['allowed_url'])) ? '<a href="$1" class="postLink">$1</a>' : '<a rel="nofollow" href="http://$1" class="postLink">$1</a>',
            "#\[url=(https?://$url_exp)\]([^?\n\t].*?)\[/url\]#isu"  => (in_array(parse_url('$1',PHP_URL_HOST),$bb_cfg['allowed_url'])) ? '<a href="$1" class="postLink">$2</a>' : '<a rel="nofollow" href="$1" class="postLink">$2</a>',
            "#\[url=(www\.$url_exp)\]([^?\n\t].*?)\[/url\]#isu"      => (in_array(parse_url('http://$1',PHP_URL_HOST),$bb_cfg['allowed_url'])) ? '<a href="$1" class="postLink">$2</a>' : '<a rel="nofollow" href="http://$1" class="postLink">$2</a>',
// Замена добавленных не через bb_code ссылок
Найти
return "<a href=\"$href\" class=\"postLink\">$name</a>";
Заменить
return (in_array(parse_url($href,PHP_URL_HOST), $bb_cfg['allowed_url'])) ? "<a href=\"$href\" class=\"postLink\">$name</a>" : "<a rel=\"nofollow\" href=\"$href\" class=\"postLink\">$name</a>";
Написал на коленке, не проверял. В теории все должно работать. Только разрешенные ссылки скорее всего придется писать во всех возможных сочетаниях с www и без.
#6
Nightmare, ну наконецто, уже куча постов про это....скажите что значит разрешенные, те что в конфиге пропишешь ? Типа внутренние ?
#7
Dr_Brown, абсолютно верно, только те, которые нужно пропускать. По существу можно сделать следущее
$bb_cfg['allowed_url'] = array($domain_name,'URL1','URL2',...,'URLn');
А URL1-URLn возможно url смежных проектов
#8
Как быть если ты контекстные ссылке продаешь из тела поста ?
#9
Dr_Brown, не обязательно у человека помимо трекера может быть еще куча замечательных проектов. Этакая перелинковка. Ну и вариант с продажой ссылок тоже рабочий. Главное, чтобы это все работало как положено. Была свободная минутка написал, тестировать к сожалению времени нет
#10
Nightmare, протестирую отпишусь, что я тока не придумывал уже.🙂