Быстрый лёгкий надёжный форумный движок
Вы не вошли.
Страницы 1
Тема закрыта
На самом деле тут не содержится вопрос. Тут содержится ответ Я мучал этот вопрос ночь целую. Но ответ нашелся при помощи одного знакомого. Теперь я просто хочу поделиться решением.
Если у вас несколько сетевых интерфейсов на одном сервере и с этих интерфейсов с разных IP-адресов приходят запросы, то по умолчанию форум будет отбрасывать те, которые не прописаны как Base URL и будет выдавать сообщение: "Неверный источник. Вы попали на эту страницу из несанкционированного источника. Пожалуйста, вернитесь и попробуйте еще раз. Если проблема осталась, пожалуйста, убедитесь что 'Начальный URL' правильно установлен в Администрирование/Свойства и, что, Вы попадаете на форум через этот URL.'"
Эту проблему можно обойти, модифицировав в файле include/functions.php функцию confirm_referrer.
Изначально она представляет собой:
function confirm_referrer($script)
{
global $pun_config, $lang_common;
if (!preg_match('#^'.preg_quote(str_replace('www.', '', $pun_config['o_base_url']).'/'.$script, '#').'#i', str_replace('www.', '', (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : ''))))
message($lang_common['Bad referrer']);
}
Если вы хотите, чтобы форум допускал несколько интерфейсов (тут показано 2), то заменить эту функцию на:
function confirm_referrer($script)
{
global $pun_config, $lang_common;
$is_correct_ref = false;
$allowedref = array($pun_config['o_base_url'], 'http://url.до.сайта');
for ($i=0, $si=sizeof($allowedref); $i<$si; $i++) {
if (preg_match(
'#^'.preg_quote(str_replace('www.', '', $allowedref[$i]).'/'.$script, '#').'#i',
str_replace('www.', '', (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : ''))))
{
$is_correct_ref = true;
break;
}
}
if(!$is_correct_ref)
message($lang_common['Bad referrer']);
}
Строчка: $allowedref = array($pun_config['o_base_url'], 'http://url.до.сайта');
- отвечает за создание массива для проверки. Первый параметр берется из базы, второй мы дописываем сами. Во втором параметре, когда укажете точный путь к корневому каталогу форума, НЕ ставьте в конце слеш (/), иначе не будет правильной обработки.
Также вы можете расширить список допускаемых Base URL (начальных ссылок), просто добавляя в этот массив новые элементы...
Например, расширение до 3-х допустимых интерфейсов:
$allowedref = array($pun_config['o_base_url'], 'http://url.до.сайта', 'http://url.до.сайта');
Ну вот, собственно, и все, что я хотел написать. Просто иногда возникают проблемы, которые с полпинка не решить. Пусть порадуются все, кому этот топик поможет
К слову: проверено на 3-х интерфейсах. Все работает отлично.
Спасибо за неоценимую помощь в исправлении функции человеку с ником stiff.
Редактировался Drac (2006-08-31 12:58:33)
Нужная некоторым вещь!
ога, у себя уже давно такое заделал, при чем добавил следующую фичу:
когда юзеры заходят по одному адресу на форум, они могут постить в мессагах линки на соседние топики и т.п. (http://adress1.ru/forum/). Когда же другой юзер, зайдя по второму адресу захочет кликнуть по ссылке в сообщении первого юсера, естейственно он ничего не увидит. так вот сделал автоматическую замену внутрефорумских ссылок, у юсера один все они имеют вид http://adress1.ru/forum/ , у юсера 2 http://forum.adress2.ru/ (правда у меня 3 адреса у форума ).
ога, у себя уже давно такое заделал, при чем добавил следующую фичу:
когда юзеры заходят по одному адресу на форум, они могут постить в мессагах линки на соседние топики и т.п. (http://adress1.ru/forum/). Когда же другой юзер, зайдя по второму адресу захочет кликнуть по ссылке в сообщении первого юсера, естейственно он ничего не увидит. так вот сделал автоматическую замену внутрефорумских ссылок, у юсера один все они имеют вид http://adress1.ru/forum/ , у юсера 2 http://forum.adress2.ru/ (правда у меня 3 адреса у форума ).
Если не трудно - выложи, плиз
Страницы 1
Тема закрыта