Уважаемые пользователи!
Напоминаем, что с 7 ноября 2020 года phpBB Group прекращает поддержку phpBB версии 3.2.
Сайт официальной русской поддержки phpBB Guru продолжит поддержку phpBB 3.2 до 31 декабря 2020 года.
С учетом этого, а также того, что версия 3.2.x больше не будет получать обновлений, за исключением связанных с проблемами безопасности
(только при их наличии и только до 7 ноября 2020 года), рекомендуется обновить конференции до версии 3.3.x.

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

Проблемы с установкой или работой 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
Стаж: 13 лет 6 месяцев

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

Сообщение Zolushka »

Во 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
Сообщения: 15298
Стаж: 14 лет 6 месяцев
Откуда: Красноярск
Благодарил (а): 402 раза
Поблагодарили: 1820 раз

Сообщение rxu »

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

Сообщение Zolushka »

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
Стаж: 14 лет 4 месяца
Откуда: Москва
Благодарил (а): 1 раз

Сообщение TjRadenot »

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

Я создал файл 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
Стаж: 13 лет 2 месяца

Сообщение Ltd »

Надо смотреть функцию 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 »

Изменил в 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
Стаж: 13 лет 2 месяца

Сообщение Ltd »

Vadim, можно написать несложный скрипт, который пройдется по базе постов и заменит ссылки.
NCom
phpBB 2.0.11
Сообщения: 810
Стаж: 14 лет 10 месяцев
Откуда: Ставрополь
Забанен: Бессрочно

Сообщение NCom »

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

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

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

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

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

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

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

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

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

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

вернее не поисковикам, а своему форуму при индексации поисковиками.
Аватара пользователя
DOMINATOR
phpBB 1.4.4
Сообщения: 153
Стаж: 13 лет 2 месяца
Откуда: Новосибирск
Поблагодарили: 13 раз

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

Сообщение DOMINATOR »

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

Есть такой замечательный мод для преобразования внешних ссылок 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
Стаж: 13 лет

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

Сообщение Комсомолец »

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

Вот например так:

Код: Выделить всё

<a href="http://anonym.to/?http://www.microsoft.com" target="_blank">Microsoft</a>
При такой конструкции html-ссылки создаётся новое окно, в нем открывается страница anonym.to, а она уже отправляет на сайт microsoft.com
Друг Враг
phpBB 1.0.0
Сообщения: 5
Стаж: 12 лет 11 месяцев

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

Сообщение Друг Враг »

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

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

Сообщение NCom »

Друг Враг
на этом сайте редирект?
Комсомолец
phpBB 1.2.0
Сообщения: 11
Стаж: 13 лет

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

Сообщение Комсомолец »

Ну что никто не знает, как организовать внешний редирект в anonim.to?
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 15298
Стаж: 14 лет 6 месяцев
Откуда: Красноярск
Благодарил (а): 402 раза
Поблагодарили: 1820 раз

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

Сообщение rxu »

Получаете всё содержимое буфера перед самой выдачей его браузеру, обрабатываем в нём все внешние ссылки, выдаём браузеру.
Изображение
Комсомолец
phpBB 1.2.0
Сообщения: 11
Стаж: 13 лет

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

Сообщение Комсомолец »

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

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