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

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

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
Zolushka
phpBB 1.0.0
Сообщения: 7
Зарегистрирован: 02.05.2007 7:19

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

Сообщение 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="(.*?)(?:(&|\?)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?) - понять не могу...

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

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


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

Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 14518
Зарегистрирован: 12.05.2006 18:16
Откуда: Красноярск
Благодарил (а): 348 раз
Поблагодарили: 1552 раза
Контактная информация:

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

По-моему, вы не там смотрите. Попробуйте взглянуть на функции function make_clickable и function make_clickable_callback в includes/functions.php.
Изображение

Zolushka
phpBB 1.0.0
Сообщения: 7
Зарегистрирован: 02.05.2007 7:19

Сообщение 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 , чтобы заработал
редирект...

Аватара пользователя
TjRadenot
phpBB 1.4.3
Сообщения: 92
Зарегистрирован: 02.07.2006 22:27
Откуда: Москва
Благодарил (а): 1 раз

Сообщение TjRadenot » 26.11.2007 16: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?

Ltd
phpBB 1.2.0
Сообщения: 14
Зарегистрирован: 14.09.2007 13:38

Сообщение Ltd » 27.11.2007 14: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;

Vadim

Сообщение Vadim » 28.11.2007 0: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;
Все работает, как надо. Но только с новыми ссылками. Старые как стояли прямыми ссылками, так и стоят. С ними уже ничего не сделаешь?

Ltd
phpBB 1.2.0
Сообщения: 14
Зарегистрирован: 14.09.2007 13:38

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

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

NCom
phpBB 2.0.11
Сообщения: 810
Зарегистрирован: 05.01.2006 13:59
Откуда: Ставрополь
Контактная информация:
Забанен: Бессрочно

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

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

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

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

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

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

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

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

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

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

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

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

Аватара пользователя
DOMINATOR
phpBB 1.4.4
Сообщения: 153
Зарегистрирован: 18.09.2007 23:07
Откуда: Новосибирск
Поблагодарили: 13 раз
Контактная информация:

Другой вариант осуществления редиректа

Сообщение 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
Таким образом получаем редирект только внешних ссылок, причем независящий от того находится ли ссылка в ббкоде или нет.

Да, и еще: при использовании этого варианта также будет осуществляться редирект "старых" ссылок, написанных до установки мода.
-----------
Ключевые слова для поиска: преобразование внешних ссылок.
Последний раз редактировалось Sheer 14.02.2015 18:06, всего редактировалось 3 раза.
Причина: Добавил urldecode в go.php
Важное дополнение к FAQ по установке модов:
Моды ночью/на пьяную голову/с похмелья не ставь, движок сломаешь! Все равно с утра переделывать прийдется...
;)

Комсомолец
phpBB 1.2.0
Сообщения: 11
Зарегистрирован: 09.11.2007 16:29

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.0.0
Сообщения: 5
Зарегистрирован: 11.12.2007 22:22

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

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

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

NCom
phpBB 2.0.11
Сообщения: 810
Зарегистрирован: 05.01.2006 13:59
Откуда: Ставрополь
Контактная информация:
Забанен: Бессрочно

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

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

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

Комсомолец
phpBB 1.2.0
Сообщения: 11
Зарегистрирован: 09.11.2007 16:29

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

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

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

Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 14518
Зарегистрирован: 12.05.2006 18:16
Откуда: Красноярск
Благодарил (а): 348 раз
Поблагодарили: 1552 раза
Контактная информация:

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

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

Получаете всё содержимое буфера перед самой выдачей его браузеру, обрабатываем в нём все внешние ссылки, выдаём браузеру.
Изображение

Комсомолец
phpBB 1.2.0
Сообщения: 11
Зарегистрирован: 09.11.2007 16:29

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

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

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

Закрыто

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