Foren / National / Russian / как спрятать внешние ссылки ?

ErsteVorherige12

Oughtem
#16 30. Juli 2010, 19:38
Метод через го.пхп хорош, но всё-таки, как заабракадабрить ссылки?
Boss
#17 31. Juli 2010, 17:15
Добавить кодирование для ссылки в 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;

Dieser Beitrag wurde von Boss (am 31. Juli 2010, 17:22, vor 13 Jahre) bearbeitet
Sergeich
#18 1. August 2010, 01:59
Я тут где-то читал, что гугл (и яндекс вроде) уже научили своих ботов различать такие ссылки и считать их внешними.
Oughtem
#19 2. August 2010, 04:22
Boss, откуда эти два исходника?
Boss
#20 2. August 2010, 12:31
# 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('&amp;', '&', $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 кеш.

Dieser Beitrag wurde von Boss (am 2. August 2010, 15:47, vor 13 Jahre) bearbeitet
jcrush
#21 6. August 2010, 05:52
# Sergeich : Я тут где-то читал, что гугл (и яндекс вроде) уже научили своих ботов различать такие ссылки и считать их внешними.

Да что вы говорите? а разве файлик го.пхп закрытый от индексации будет читаться? ну ну.

имхо сейчас уже достаточно прописывать в ссылках нофоллоу, без всяких редиректов.
SEO блог: http://blog.stfw.ru/
Kort
#22 6. August 2010, 15:07
... и получается что смысла скрывать внешние ссылки никакого нет: поисковики редирект определят, а nofollow все равно снимет ссылочный вес.
SED.by - создание сайтов, разработка плагинов и тем для Котонти
Sergeich
#23 6. August 2010, 18:46
Kort, вот и я про то же толкую. смысла во всём этом гемморое нет теперь никакого.
jcrush
#24 6. August 2010, 19:10
nofollow ссылки не учитываются.
SEO блог: http://blog.stfw.ru/
Kort
#25 6. August 2010, 19:13
# jcrush : nofollow ссылки не учитываются.
Это кто сказал? Последнее что я знаю, это то, что без nofollow ссылочный вес снимается, и передается, а с nofollow снимается, но не передается.
SED.by - создание сайтов, разработка плагинов и тем для Котонти
jcrush
#26 7. August 2010, 11:35
Как правило, переход не производится. Это означает, что по этим ссылкам Google не передает ни PageRank, ни текст ссылки. Фактически использование атрибута nofollow приводит к тому, что целевые ссылки выпадают из нашей общей диаграммы Сети.

http://www.google.com/support/webmasters/bin/answer.py?answer=96569

c Яши так же

что там снимается? не фига не снимается.
SEO блог: http://blog.stfw.ru/
Oughtem
#27 29. August 2010, 06:27
А чё тут морочиться? Код выложен на блюдечке, допишите себе в функции свой нофолоу, а для пущей важности - таргет ="бланк" и граница на замке. Заабракадабреная ссылка с нофолоу точно ничего не унесёт с вашего сайта. Кроме того резко снижается ссылочная активность мудаковатых личностей в комментариях и на форуме, когда вместо ожидаемой чистой ссылки появляется "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

подскажите, пожалуйста, как это исправить?

Dieser Beitrag wurde von Oughtem (am 21. Oktober 2010, 20:32, vor 13 Jahre) bearbeitet
Boss
#28 21. Oktober 2010, 22:31
В новых PHP нет ereg, надо заменять. В сети на эту тему есть информация.
Straight
#29 23. Januar 2011, 00:36
Ссылку абракадабрить или закрывать от индексации толку нет. 1. Вес всё равно уходит. А куда уходит в пустоту или на индексируемую страницу - это детали. 2. Ноиндекс или нофоллоу не для того, чтобы 5000 ссылок не учитывать. Сейчас все неиндексируемые страницы всё равно в базе поисковика. И неизвестно, не наложит ли через пару месяцев поисковик какой-нибудь фильтр на сайт, массово закрывающий от индексации ссылки. Подозрительные случаи на эту тему были.

Ссылки нужно оставлять либо для зарегистрированных пользователей, чтоб бот (незарегистрированный её не видел - ну, типа: у вас должно быть 1 сообщение, чтоб вы увидели эту ссылку), а лучше, проверять внешняя или внутренняя и, если внешняя, то добавлять её в текстовом виде. Может через нередактируемые стоп слова заменять _http://www на "вставьте ссылку в окно своего браузера". Кстати, - это кардинальное решение против спамеров. Потому что мало кто проверяет из безбашенных спамильщиков закрыта ссылка или нет. Зато сразу видят, что её нет в природе.
Roffun
#30 23. Juli 2014, 09:33

Наверное на сегодняшний момент самый надежный вариант скрыть внешнюю ссылку - это превратить ее в текст для группы 0,  в которую входят и поисковики. А авторизованным показывать.

 

Улетел на другую планету, а там почты нету.. https://www.cotonti.com/forums/45298?m=posts

Dieser Beitrag wurde von Roffun (am 27. November 2016, 19:47, vor 7 Jahre) bearbeitet

ErsteVorherige12