Пропустить

Редирект (переадресация, перенаправление) внешних ссылок

Проблемы с установкой или работой phpBB 3.0.x? Получите помощь здесь!
Свернуть Развернуть Правила форума Местная Конституция | Шаблон запроса | Документация (phpBB3) | Переход на 3.0.6 и выше | FAQ-3 (phpbb3) | Как задавать вопросы | Как устанавливать моды

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).

Редирект (переадресация, перенаправление) внешних ссылок

Сообщение Zolushka » 14.09.2007 7:26

Во 2-й версии у меня все ссылки в сообщениях форума стоят через редирект (сделано в файле bbcode.php).


function make_clickable($text)
{

$text = preg_replace('#(script|about|applet|activex|chrome):#is', "\\1:", $text);

	// pad it with a space so we can match things at the start of the 1st line.
	$ret = ' ' . $text;

	// matches an "xxxx://yyyy" URL at the start of a line, or after a space.
	// xxxx can only be alpha characters.
	// yyyy is anything up to the first space, newline, comma, double quote or <
	$ret = preg_replace("#(^|[\n ])([\w]+?://[\w\#$%&~/.\-;:=,?@\[\]+]*)#is", "\\1<a href=\"ХХХ.PHP?\\2\" target=\"_blank\">\\2</a>", $ret);


function undo_make_clickable($text)
{
	$text = preg_replace("#<!-- BBCode auto-link start --><a href=\"ХХХ.PHP?(.*?)\" target=\"_blank\">.*?</a><!-- BBCode auto-link end -->#i", "\\1", $text);
	$text = preg_replace("#<!-- BBcode auto-mailto start --><a href=\"mailto:(.*?)\">.*?</a><!-- BBCode auto-mailto end -->#i", "\\1", $text);

	return $text;

}


А вот КАК это сделать в phpBB 3 ?

Насколько я понимаю, в трешке за преобразование ссылок отвечает вот этот кусок кода в functions.php:

/**
* This function returns a regular expression pattern for commonly used expressions
* Use with / as delimiter for email mode and # for url modes
* mode can be: email|bbcode_htm|url|url_inline|www_url|www_url_inline|relative_url|relative_url_inline
*/
function get_preg_expression($mode)
{
	switch ($mode)
	{
		case 'email':
			return '[a-z0-9&\'\.\-_\+]+@[a-z0-9\-]+\.([a-z0-9\-]+\.)*[a-z]+';
		break;

		case 'bbcode_htm':
			return array(
				'#<!\-\- e \-\-><a href="mailto:(.*?)">.*?</a><!\-\- e \-\->#',
				'#<!\-\- l \-\-><a (?:class="[\w-]+" )?href="(.*?)(?:(&amp;|\?)sid=[0-9a-f]{32})?">.*?</a><!\-\- l \-\->#',
				'#<!\-\- ([mw]) \-\-><a (?:class="[\w-]+" )?href="(.*?)">.*?</a><!\-\- \1 \-\->#',
				'#<!\-\- s(.*?) \-\-><img src="\{SMILIES_PATH\}\/.*? \/><!\-\- s\1 \-\->#',
				'#<!\-\- .*? \-\->#s',
				'#<.*?>#s',
			);
		break;

		case 'url':
		case 'url_inline':
			$inline = ($mode == 'url') ? ')' : '';
			// generated with regex generation file in the develop folder
			return "[a-z][a-z\d+\-.]*:/{2}(?:(?:[a-z0-9\-._~!$&'($inline*+,;=:@|]+|%[\dA-F]{2})+|[0-9.]+|\[[a-z0-9.]+:[a-z0-9.]+:[a-z0-9.:]+\])(?::\d*)?(?:/(?:[a-z0-9\-._~!$&'($inline*+,;=:@|]+|%[\dA-F]{2})*)*(?:\?(?:[a-z0-9\-._~!$&'($inline*+,;=:@/?|]+|%[\dA-F]{2})*)?(?:\#(?:[a-z0-9\-._~!$&'($inline*+,;=:@/?|]+|%[\dA-F]{2})*)?";
		break;

		case 'www_url':
		case 'www_url_inline':
			$inline = ($mode == 'www_url') ? ')' : '';
			return "www\.(?:[a-z0-9\-._~!$&'($inline*+,;=:@|]+|%[\dA-F]{2})+(?::\d*)?(?:/(?:[a-z0-9\-._~!$&'($inline*+,;=:@|]+|%[\dA-F]{2})*)*(?:\?(?:[a-z0-9\-._~!$&'($inline*+,;=:@/?|]+|%[\dA-F]{2})*)?(?:\#(?:[a-z0-9\-._~!$&'($inline*+,;=:@/?|]+|%[\dA-F]{2})*)?";
		break;

		case 'relative_url':
		case 'relative_url_inline':
			$inline = ($mode == 'relative_url') ? ')' : '';
			return "(?:[a-z0-9\-._~!$&'($inline*+,;=:@|]+|%[\dA-F]{2})*(?:/(?:[a-z0-9\-._~!$&'($inline*+,;=:@|]+|%[\dA-F]{2})*)*(?:\?(?:[a-z0-9\-._~!$&'($inline*+,;=:@/?|]+|%[\dA-F]{2})*)?(?:\#(?:[a-z0-9\-._~!$&'($inline*+,;=:@/?|]+|%[\dA-F]{2})*)?";
		break;
	}

	return '';
}


Но вот куда здесь пристроить название файла, который делает редирект (ХХХ.PHP?) - понять не могу...

А если не здесь (не в этом файле или не в этом месте), то где???

Программисты, помогите плииииз....


Слова для поиска: переадресация ссылок, внешние ссылки

Zolushka
phpBB 1.0.0
 
Сообщения: 7
Зарегистрирован: 02.05.2007 7:19
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Сообщение rxu » 23.09.2007 10:12

По-моему, вы не там смотрите. Попробуйте взглянуть на функции function make_clickable и function make_clickable_callback в includes/functions.php.
Изображение
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
 
Сообщения: 7366
Зарегистрирован: 12.05.2006 18:16
Откуда: Красноярск
Благодарил (а): 2 раз.
Поблагодарили: 270 раз.

Сообщение Zolushka » 23.09.2007 12:25

rxu писал(а):Попробуйте взглянуть на функции function make_clickable и function make_clickable_callback в includes/functions.php.

Да, это наверное те самые функции. Спасибо за подсказку.

К сожалению, мне их одолеть "методом научного тыка" не удается. :cry:
Видимо нужно быть программистом, чтобы прикрутить

@header("Location: ".$QUERY_STRING);

к функциям MAGIC_URL_FULL и MAGIC_URL_WWW , чтобы заработал
редирект...

Zolushka
phpBB 1.0.0
 
Сообщения: 7
Зарегистрирован: 02.05.2007 7:19
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Сообщение TjRadenot » 26.11.2007 17:42

Аналогично возникла такая же необходимость сделать редирект всех внешних ссылок...

Я создал файл go.php:

<?php
if (isset($_SERVER['QUERY_STRING'])) Header('Location: '.$_SERVER['QUERY_STRING']);
?>


и поместил в корень сайта. Затем в styles/xxx/temlate/bbcode.html добавил следующее:

<!-- BEGIN url --><a href="/go.php?{URL}" class="postlink">{DESCRIPTION}</a><!-- END url -->


и все.
Естественно теперь редирект выполняется только в ссылках заключенных в теги:
[url][/url]


А хотелось бы чтобы абсолютно ВСЕ внешние ссылки выполнялись через редирект. Подскажите пожалуйста что я упустил?

Добавлено спустя 2 минуты 53 секунды:

А и еще что нужно прописать в robots.txt, чтобы запретить индексацию GO.PHP?
Аватара пользователя
TjRadenot
phpBB 1.4.4
 
Сообщения: 92
Зарегистрирован: 02.07.2006 22:27
Откуда: Москва
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.

Сообщение Ltd » 27.11.2007 15:04

Надо смотреть функцию make_clickable_callback, которая занимается окончательным парсингом.
Примерно где-то в районе:

		case MAGIC_URL_WWW:
			$tag	= 'w';
			$url	= 'http://' . $url;
			$text	= (strlen($url) > 55) ? substr($url, 0, 39) . ' ... ' . substr($url, -10) : $url;
		break; 

Например $url = '/redirect.php?'.$url;

Ltd
phpBB 1.2.0
 
Сообщения: 14
Зарегистрирован: 14.09.2007 13:38
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Сообщение Vadim » 28.11.2007 1:48

Изменил в functions_content.php функцию make_clickable_callback:

		case MAGIC_URL_FULL:
			$tag	= 'm';
			$text	= (strlen($url) > 55) ? substr($url, 0, 39) . ' ... ' . substr($url, -10) : $url;
			$url  = '/go.php?' . $url; 
			$target = 'target=_blank';
		break;

		case MAGIC_URL_WWW:
			$tag	= 'w';
			$url	= 'http://' . $url;
			$text	= (strlen($url) > 55) ? substr($url, 0, 39) . ' ... ' . substr($url, -10) : $url;
			$url  = '/go.php?' . $url; 
			$target = 'target=_blank';
		break;


Все работает, как надо. Но только с новыми ссылками. Старые как стояли прямыми ссылками, так и стоят. С ними уже ничего не сделаешь?

Vadim
 

Сообщение Ltd » 28.11.2007 11:01

Vadim, можно написать несложный скрипт, который пройдется по базе постов и заменит ссылки.

Ltd
phpBB 1.2.0
 
Сообщения: 14
Зарегистрирован: 14.09.2007 13:38
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Сообщение NCom » 18.03.2008 20:43

сделал все как написано, редирект новых ссылок работает. А как избавится от такого дела.

пример.
создаю сообщение
http://www.site.ru

отправляю. готово.

теперь редактирую его и вижу

/go.php?http://www.site.ru

нужно чтобы этот кусок не появлялся в сообщении при редактировании

это происходит только со ссылками без использования [url][/url]

Добавлено спустя 1 минуту 10 секунд:

Ltd писал(а):Vadim, можно написать несложный скрипт, который пройдется по базе постов и заменит ссылки.


напиши пожалуйста. будет просто великолепно.

Кстати второй вариант не работает со склейкой сообщений.
и еще. Почему внутренние ссылки тоже через редирект идут? не думаете ли вы, что этим только навредите поисковикам?

Добавлено спустя 6 минут 39 секунд:

вернее не поисковикам, а своему форуму при индексации поисковиками.

NCom
phpBB 2.0.23
 
Сообщения: 815
Зарегистрирован: 05.01.2006 14:59
Откуда: Ставрополь
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Предупреждения: 1

Сообщение DOMINATOR » 04.05.2008 23:20

Решил предложить другой вариант осуществления редиректа. На мой взгляд лучший из предложенных.

Есть такой замечательный мод для преобразования внешних ссылок Prime Links, он позволяет открывать внешние ссылки с форума в новом окне, а внутренние в текущем. А также в нем легко можно организовать редирект внешних ссылок. Сам мод прост в установке: нужно внести одну поправку и добавить один файл, кроме того мод находится в базе phpbb.com. Редирект осуществляется очень просто:
1. Создаем в корне форума файл go.php следующего содержания:
<?php 
if (isset($_SERVER['QUERY_STRING'])) Header('Location: '.urldecode($_SERVER['QUERY_STRING'])); 
?>
MIT:: без функции urldecode некоторые символы, например ?, в ссылку, на которую происходит редирект, будут выведены неверно.
2. Устанавливаем Prime Links, вносим нужные правки в код мода.
Открываем includes/prime_links.php, находим строку:
define('EXTERNAL_LINK_PREFIX', '');		// Example: 'http://anonym.to?'

заменяем на
define('EXTERNAL_LINK_PREFIX', 'http://ваш_домен/папка_форума/go.php?');		// Example: 'http://anonym.to?'

3. Создаем в корне сайта файл robots.txt (именно в нижнем регистре!) следующего содержания:
User-agent: *
Disallow: /папка_форума/go.php


Таким образом получаем редирект только внешних ссылок, причем независящий от того находится ли ссылка в ббкоде [url][/url] или нет.

Да, и еще: при использовании этого варианта также будет осуществляться редирект "старых" ссылок, написанных до установки мода.
-----------
Ключевые слова для поиска: преобразование внешних ссылок.
Последний раз редактировалось MIT 19.02.2011 0:31, всего редактировалось 2 раз(а).
Причина: Добавил urldecode в go.php
Важное дополнение к FAQ по установке модов:
Моды ночью/на пьяную голову/с похмелья не ставь, движок сломаешь! Все равно с утра переделывать прийдется...
;)
За это сообщение автора DOMINATOR поблагодарили: 11
CHiiEF (14.03.2011 16:57), Di_Mok (12.10.2010 16:37), hbdfyd (07.05.2011 23:53), hdv (07.11.2010 17:13), masterrek (10.12.2010 3:31), MAzZY (02.09.2010 12:49), Seddos (18.02.2011 20:37), Sergiocharm (02.02.2011 21:47), ZhAN (06.09.2010 12:33), Катерина (07.05.2011 22:55) и ещё один
Аватара пользователя
DOMINATOR
phpBB 2.0.2
 
Сообщения: 155
Зарегистрирован: 18.09.2007 23:07
Откуда: Новосибирск
Благодарил (а): 0 раз.
Поблагодарили: 11 раз.

Re: Редирект внешних ссылок

Сообщение Комсомолец » 24.07.2008 13:12

DOMINATOR, скажите, а с помощью этого плагина можно сделать так, чтобы все внешние ссылки открывались в новом окне и оттуда уже из нового окна шёл редирект? То есть чтобы тот сайт не видел с какого сайта идёт редирект?

Вот например так:
<a href="http://anonym.to/?http://www.microsoft.com" target="_blank">Microsoft</a>

При такой конструкции html-ссылки создаётся новое окно, в нем открывается страница anonym.to, а она уже отправляет на сайт microsoft.com

Комсомолец
phpBB 1.2.0
 
Сообщения: 11
Зарегистрирован: 09.11.2007 17:29
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Re: Редирект внешних ссылок

Сообщение Друг Враг » 28.07.2008 8:22

Всё хорошо, но это влияет только на ссылки в темах, а не на все внешние ссылки форума. В профилях и списке пользователей ссылки на их сайты остались прямыми. Как организовать редирект ВСЕХ внешних ссылок?
Например, каким образом это реализовано здесь, на конференции поддержки phpBB? Хотелось бы так же :mrgreen:

Друг Враг
phpBB 1.0.0
 
Сообщения: 5
Зарегистрирован: 11.12.2007 23:22
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Re: Редирект внешних ссылок

Сообщение NCom » 28.07.2008 8:43

Друг Враг
на этом сайте редирект?

NCom
phpBB 2.0.23
 
Сообщения: 815
Зарегистрирован: 05.01.2006 14:59
Откуда: Ставрополь
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Предупреждения: 1

Re: Редирект внешних ссылок

Сообщение Комсомолец » 08.08.2008 15:02

Ну что никто не знает, как организовать внешний редирект в anonim.to?

Комсомолец
phpBB 1.2.0
 
Сообщения: 11
Зарегистрирован: 09.11.2007 17:29
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Re: Редирект внешних ссылок

Сообщение rxu » 08.08.2008 15:26

Получаете всё содержимое буфера перед самой выдачей его браузеру, обрабатываем в нём все внешние ссылки, выдаём браузеру.
Изображение
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
 
Сообщения: 7366
Зарегистрирован: 12.05.2006 18:16
Откуда: Красноярск
Благодарил (а): 2 раз.
Поблагодарили: 270 раз.

Re: Редирект внешних ссылок

Сообщение Комсомолец » 10.08.2008 0:58

rxu, извините, неправильно выразился, я сам в этом не бум-бум, я имел в виду что было-бы хорошо, есл бы кто-нибудь сделал :oops:

Комсомолец
phpBB 1.2.0
 
Сообщения: 11
Зарегистрирован: 09.11.2007 17:29
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

След.

Вернуться в Поддержка phpBB 3.0.х

 

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0

Бессрочный конкурс phpBB-ориентированных материалов
FastVPS — надёжный и доступный хостинг для phpBB
Место для вашей рекламы
cron