Oughtem |
|
---|---|
Метод через го.пхп хорош, но всё-таки, как заабракадабрить ссылки?
|
Boss |
|
---|---|
Добавить кодирование для ссылки в go.php. Я еще циферку ставлю, поэтому простое раскодирование моего кода не применимо.
// Формат (тип) в цифру.
if(strcasecmp($r_TYPE, "http") == 0) { $r_TYPE = "http"; $r_TYPE_NUM = 1; }
elseif(strcasecmp($r_TYPE, "https") == 0) { $r_TYPE = "https"; $r_TYPE_NUM = 2; }
if(strcasecmp($r_TYPE, "ftp") == 0) { $r_TYPE = "ftp"; $r_TYPE_NUM = 3; }
$r_URL_ENCODE = base64_encode($r_URL);
$r_URL = "http://www.ru/go.php?url=".$r_TYPE_NUM.$r_URL_ENCODE;
|
|
This post was edited by Boss (2010-07-31 17:22, 13 years ago) |
Sergeich |
|
---|---|
Я тут где-то читал, что гугл (и яндекс вроде) уже научили своих ботов различать такие ссылки и считать их внешними.
|
Oughtem |
|
---|---|
Boss, откуда эти два исходника?
|
Boss |
|
---|---|
# Sergeich : Я тут где-то читал, что гугл (и яндекс вроде) уже научили своих ботов различать такие ссылки и считать их внешними.Для этого и циферки впереди. :-) Ссылку распознать не возможно, если только не знаешь секрет. Роботы не знают. Секрет можно усложнить. Oughtem со своего сайта взял. У меня уже давно все ссылки закодированы. В парсинге, где код автозамены ссылок (здесь ранее было) просто добавляем это кодирование и все. Ну и конечно в go.php надо раскодирование не забыть добавить. :-) Добавлено 3 часа 15 Минут спустя: Мой текущий кустомный парсер
function sed_custom_parse($text, $parse_bbcodes = TRUE, $parse_smilies = TRUE, $parse_newlines = TRUE)
{
if($parse_bbcodes)
{
global $sys, $sed_smilies;
// Коды. Высокоприоритетная обработка!
$text = preg_replace_callback('`\[code\](.+?)\[/code\]`mis', create_function('$input', 'return("<pre class=\"code\">".hw_sed_bbcode_cdata($input[1])."</pre>");'), $text);
$text = preg_replace_callback('`\[highlight=([\w\-]+)\](.*?)\[/highlight\]`mis', create_function('$input', 'return("<div class=\"highlight\"><pre class=\"".$input[1]."\">".hw_sed_bbcode_cdata($input[2])."</pre></div>");'), $text);
// Авто-ссылки.
$text = preg_replace_callback('`(^|\s)(http|https|ftp)://([^\s"\'\[]+)`mis', 'hw_url_encode', $text);
// ББ-ссылки.
$text = preg_replace_callback('`\[url\](http|https|ftp)://([^\s"\'\[]+)\[/url\]`mis', 'hw_url_encode', $text);
$text = preg_replace_callback('`\[(url)=(http|https|ftp)://([^\s"\'\[]+)\](.+?)\[/url\]`mis', 'hw_url_encode', $text);
$text = preg_replace_callback('`\[(url)=([^\s"\'\[]+)\](.+?)\[/url\]`mis', 'hw_url_encode', $text);
// Картинки.
$text = preg_replace_callback('`\[(img|thumb)\]([^\s"\';\?\(\[]+\.(?:jpg|jpeg|gif|png))\[/(img|thumb)\]`', 'hw_sed_bbcode_pict', $text);
$text = preg_replace_callback('`\[(img|thumb)=([^\s"\';\?\(\[]+\.(?:jpg|jpeg|gif|png))\]([^\s"\';\?\(\[]+\.(?:jpg|jpeg|gif|png))\[/(img|thumb)\]`', 'hw_sed_bbcode_pict', $text);
$text = preg_replace_callback('`\[(img)=(.+?)\]([^\s"\';\?\(\[]+\.(?:jpg|jpeg|gif|png))\[/img\]`', 'hw_sed_bbcode_pict', $text);
// Смайлики.
if($parse_smilies && is_array($sed_smilies))
{
$code = array();
$unique_seed = $sys['unique'];
$ii = 10000;
foreach($sed_smilies as $k => $v)
{
$ii++;
$key = '**'.$ii.$unique_seed.'**';
$code[$key]= "<img class='smiley' src='./images/smilies/".$v['file']."' alt='".htmlspecialchars($v['code'])."'>";
$text = preg_replace('#'.preg_quote($v['code']).'#', $key, $text);
if(htmlspecialchars($v['code']) != $v['code'])
{
// Fix for cc inserts
$text = preg_replace('#'.preg_quote(htmlspecialchars($v['code'])).'#', $key, $text);
}
}
foreach($code as $x => $y) { $text = str_replace($x, $y, $text); }
}
}
else
{
// Вырезка тегов.
$text = preg_replace("'\[img.*?/img\]'si", "", $text);
$text = preg_replace("'\[thumb.*?/thumb\]'si", "", $text);
$text = preg_replace("'[[^]]*?.*?]'si", "", $text);
// Нейтрализация бб-кодов и ссылок.
$text = hw_sed_bbcode_cdata($text);
}
return $text;
}
Теперь полностью функция кодирующая ссылки. Функция у меня достаточно громоздкая, т.к. попутно решаются другие задачи. Из-за этого публиковать особо не хотел. Но раз просят, то пожалуйста. Ссылки кодируются выборочно. Если сайт свой, то остаются как есть.
// Функция кодирующая чужую ссылку и выводящая ее через go.php.
function hw_url_encode($url, $array = FALSE)
{
if(is_array($url) || strlen($url))
{
if(!is_array($url)) { $url = array(0 => $url, 1 => ""); }
if(count($url) == 2)
{
$r_URL = $url[0];
$r_TEXT = $url[1];
if(preg_match("/https:\/\//", $r_URL))
{
$r_TYPE = "https";
$r_URL = str_replace('https://', '', $r_URL);
}
elseif(preg_match("/ftp:\/\//", $r_URL))
{
$r_TYPE = "ftp";
$r_URL = str_replace('ftp://', '', $r_URL);
}
else
{
$r_TYPE = "http";
$r_URL = str_replace('http://', '', $r_URL);
}
}
elseif(count($url) == 3)
{
$r_TYPE = $url[1];
$r_URL = $url[2];
}
elseif(count($url) == 4 && $url[1] == "url")
{
$r_URL = $url[2];
$r_TEXT = $url[3];
$r_TYPE = "http";
}
elseif(count($url) == 4)
{
$r_BEFORE = $url[1];
$r_TYPE = $url[2];
$r_URL = $url[3];
}
elseif(count($url) == 5)
{
$r_TYPE = $url[2];
$r_URL = $url[3];
$r_TEXT = $url[4];
}
else
{ return FALSE; }
if(strlen($r_TYPE) && strlen($r_URL))
{
if(strcasecmp($r_TYPE, "http") == 0) { $r_TYPE = "http"; $r_TYPE_NUM = 1; }
elseif(strcasecmp($r_TYPE, "https") == 0) { $r_TYPE = "https"; $r_TYPE_NUM = 2; }
if(strcasecmp($r_TYPE, "ftp") == 0) { $r_TYPE = "ftp"; $r_TYPE_NUM = 3; }
if($r_TYPE_NUM > 0)
{
if(preg_match("/mysite.ru/", $r_URL))
{
$r_URL = $r_TYPE."://".$r_URL;
$r_TEXT = strlen($r_TEXT) ? $r_TEXT : $r_URL;
}
elseif(!preg_match("/http/", $r_URL) && (preg_match("/users-m-details-id/", $r_URL) ||
preg_match("/page-al/", $r_URL) || preg_match("/page-id/", $r_URL)))
{
$r_URL = str_replace('/', '', $r_URL);
$r_URL = "http://www.mysite.ru/".$r_URL;
$r_TEXT = strlen($r_TEXT) ? $r_TEXT : $r_URL;
}
else
{
$r_URL_SOURCE = $r_URL;
$r_URL_ENCODE = base64_encode($r_URL);
$r_URL = "http://www.mysite.ru/go.php?url=".$r_TYPE_NUM.$r_URL_ENCODE;
$r_URL_TARGET = " target=\"_blank\"";
$r_URL_TARGET_TITLE = " target=\"_blank\" title=\"Ссылка откроется в новом окне\"";
// Если в тексте пришла ссылка или текст отсутствует.
if(preg_match("/http:\/\/|https:\/\/|ftp:\/\//", $r_TEXT) || strlen(trim($r_TEXT)) == 0)
{
$r_TEXT = $r_TYPE."-ссылка";
}
}
}
else
{ return FALSE; }
$return = $r_BEFORE."<a href=\"".$r_URL."\"".$r_URL_TARGET_TITLE.">".$r_TEXT."</a>";
if($array !== FALSE)
{
$return = array(
"URL" => $r_URL,
"URL_SOURCE" => strlen($r_URL_SOURCE) ? $r_URL_SOURCE : $r_URL,
"URL_ENCODE" => $r_URL_ENCODE,
"URL_TARGET" => $r_URL_TARGET,
"URL_TARGET_TITLE" => $r_URL_TARGET_TITLE,
"URL_HTML" => $return,
"TEXT" => strlen($r_TEXT) ? $r_TEXT : "ссылка",
"TYPE" => $r_TYPE,
"TYPE_NUM" => $r_TYPE_NUM,
"BEFORE" => $r_BEFORE
);
}
return($return);
}
else
{ return FALSE; }
}
else
{ return FALSE; }
}
Мой файл go.php
<?PHP
// Берем параметр ссылки.
$url = $old = $_GET['url'];
// Если параметр пришел.
if(strlen($url))
{
$type = substr($url, 0, 1);
$url = substr($url, 1, strlen($url));
$url = base64_decode($url);
$url = str_replace('&', '&', $url);
// Если это http-ссылка.
if($type == 1 && !ereg("\.", $old))
{
header("Location: http://$url");
}
// Иначе, если это https-ссылка.
elseif($type == 2 && !ereg("\.", $old))
{
header("Location: https://$url");
}
// Иначе, если это ftp-ссылка.
elseif($type == 3 && !ereg("\.", $old))
{
header("Location: ftp://$url");
}
// Иначе, старый стиль.
elseif(ereg("\.", $old))
{
// Если ссылка имела дополнительные параметры.
if(count($_GET) > 1)
{
foreach($_GET as $i => $k)
{
if($i !== 'url')
{
if(ereg("\?", $old))
{
$old = $old.'&'.$i.'='.$k;
}
else
{
$old = $old.'?'.$i.'='.$k;
}
}
}
}
// Если это ftp-ссылка.
if(ereg("ftp://", $old))
{
Header("Location: $old");
}
else
{
// Обработка ссылок с http:// и без.
if(ereg("http://", $old))
{
Header("Location: $old");
}
else
{
Header("Location: http://$old");
}
}
}
else
{
Header("Location: plug-e-overview.html");
}
}
else
{
Header("Location: plug-e-overview.html");
}
?>
Файл go.php заменяем, функцию преобразования ссылок и функцию парсинга в parser.php. Включаешь обработку своего парсинга в панели управления. Там же сбрасываем html кеш. |
|
This post was edited by Boss (2010-08-02 15:47, 13 years ago) |
jcrush |
|
---|---|
# Sergeich : Я тут где-то читал, что гугл (и яндекс вроде) уже научили своих ботов различать такие ссылки и считать их внешними. Да что вы говорите? а разве файлик го.пхп закрытый от индексации будет читаться? ну ну. имхо сейчас уже достаточно прописывать в ссылках нофоллоу, без всяких редиректов. SEO блог: http://blog.stfw.ru/
|
Kort |
|
---|---|
... и получается что смысла скрывать внешние ссылки никакого нет: поисковики редирект определят, а nofollow все равно снимет ссылочный вес.
SED.by - создание сайтов, разработка плагинов и тем для Котонти
|
Sergeich |
|
---|---|
Kort, вот и я про то же толкую. смысла во всём этом гемморое нет теперь никакого.
|
jcrush |
|
---|---|
nofollow ссылки не учитываются.
SEO блог: http://blog.stfw.ru/
|
Kort |
|
---|---|
# jcrush : nofollow ссылки не учитываются.Это кто сказал? Последнее что я знаю, это то, что без nofollow ссылочный вес снимается, и передается, а с nofollow снимается, но не передается. SED.by - создание сайтов, разработка плагинов и тем для Котонти
|
jcrush |
|
---|---|
Как правило, переход не производится. Это означает, что по этим ссылкам Google не передает ни PageRank, ни текст ссылки. Фактически использование атрибута nofollow приводит к тому, что целевые ссылки выпадают из нашей общей диаграммы Сети.
http://www.google.com/support/webmasters/bin/answer.py?answer=96569 c Яши так же что там снимается? не фига не снимается. SEO блог: http://blog.stfw.ru/
|
Oughtem |
|
---|---|
А чё тут морочиться? Код выложен на блюдечке, допишите себе в функции свой нофолоу, а для пущей важности - таргет ="бланк" и граница на замке. Заабракадабреная ссылка с нофолоу точно ничего не унесёт с вашего сайта. Кроме того резко снижается ссылочная активность мудаковатых личностей в комментариях и на форуме, когда вместо ожидаемой чистой ссылки появляется "http://ссылка" с аброкадаброй.
Добавлено 53 дня спустя: После того, как хостер обновился с 5.2.13 версии пхп на 5.3.3-r1 все ссылки через go.php стали не рабочими. Вот что пишет Deprecated: Function ereg() is deprecated in /var/www/virtual/studportal.net.ua/htdocs/go.php on line 33 Deprecated: Function ereg() is deprecated in /var/www/virtual/studportal.net.ua/htdocs/go.php on line 55 Deprecated: Function ereg() is deprecated in /var/www/virtual/studportal.net.ua/htdocs/go.php on line 62 Warning: Cannot modify header information - headers already sent by (output started at /var/www/virtual/studportal.net.ua/htdocs/go.php:33) in /var/www/virtual/studportal.net.ua/htdocs/go.php on line 64 подскажите, пожалуйста, как это исправить? |
|
This post was edited by Oughtem (2010-10-21 20:32, 13 years ago) |
Boss |
|
---|---|
В новых PHP нет ereg, надо заменять. В сети на эту тему есть информация.
|
Straight |
|
---|---|
Ссылку абракадабрить или закрывать от индексации толку нет. 1. Вес всё равно уходит. А куда уходит в пустоту или на индексируемую страницу - это детали. 2. Ноиндекс или нофоллоу не для того, чтобы 5000 ссылок не учитывать. Сейчас все неиндексируемые страницы всё равно в базе поисковика. И неизвестно, не наложит ли через пару месяцев поисковик какой-нибудь фильтр на сайт, массово закрывающий от индексации ссылки. Подозрительные случаи на эту тему были.
Ссылки нужно оставлять либо для зарегистрированных пользователей, чтоб бот (незарегистрированный её не видел - ну, типа: у вас должно быть 1 сообщение, чтоб вы увидели эту ссылку), а лучше, проверять внешняя или внутренняя и, если внешняя, то добавлять её в текстовом виде. Может через нередактируемые стоп слова заменять _http://www на "вставьте ссылку в окно своего браузера". Кстати, - это кардинальное решение против спамеров. Потому что мало кто проверяет из безбашенных спамильщиков закрыта ссылка или нет. Зато сразу видят, что её нет в природе. |
Roffun |
|
---|---|
Наверное на сегодняшний момент самый надежный вариант скрыть внешнюю ссылку - это превратить ее в текст для группы 0, в которую входят и поисковики. А авторизованным показывать.
Улетел на другую планету, а там почты нету.. https://www.cotonti.com/forums/45298?m=posts
|
|
This post was edited by Roffun (2016-11-27 19:47, 7 years ago) |