Русское сообщество fluxbb

Быстрый лёгкий надёжный форумный движок

Вы не вошли.

Объявление

Вы можете внести свой вклад в содержание сайта. Жертвователи попадут в почетную группу "Спонсоры". Поддержать сайт.

#1 2006-08-31 12:58:02

Drac
Гость

Как сделать несколько интерфейсов(сетей) на один сайт?!

На самом деле тут не содержится вопрос. Тут содержится ответ smile Я мучал этот вопрос ночь целую. Но ответ нашелся при помощи одного знакомого. Теперь я просто хочу поделиться решением.

Если у вас несколько сетевых интерфейсов на одном сервере и с этих интерфейсов с разных 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.до.сайта');

smile Ну вот, собственно, и все, что я хотел написать. Просто иногда возникают проблемы, которые с полпинка не решить. Пусть порадуются все, кому этот топик поможет smile

К слову: проверено на 3-х интерфейсах. Все работает отлично.

Спасибо за неоценимую помощь в исправлении функции человеку с ником stiff.

Редактировался Drac (2006-08-31 12:58:33)

#2 2006-09-03 22:05:18

SDTux
Гость

Re: Как сделать несколько интерфейсов(сетей) на один сайт?!

Нужная некоторым вещь!

#3 2006-09-04 22:01:15

kisin
Гость

Re: Как сделать несколько интерфейсов(сетей) на один сайт?!

ога, у себя уже давно такое заделал, при чем добавил следующую фичу:
когда юзеры заходят по одному адресу на форум, они могут постить в мессагах линки на соседние топики и т.п. (http://adress1.ru/forum/). Когда же другой юзер, зайдя по второму адресу захочет кликнуть по ссылке в сообщении первого юсера, естейственно он ничего не увидит. так вот сделал автоматическую замену внутрефорумских ссылок, у юсера один все они имеют вид http://adress1.ru/forum/ , у юсера 2 http://forum.adress2.ru/ (правда у меня 3 адреса у форума smile ).

#4 2006-10-12 10:32:26

Drac
Гость

Re: Как сделать несколько интерфейсов(сетей) на один сайт?!

kisin пишет:

ога, у себя уже давно такое заделал, при чем добавил следующую фичу:
когда юзеры заходят по одному адресу на форум, они могут постить в мессагах линки на соседние топики и т.п. (http://adress1.ru/forum/). Когда же другой юзер, зайдя по второму адресу захочет кликнуть по ссылке в сообщении первого юсера, естейственно он ничего не увидит. так вот сделал автоматическую замену внутрефорумских ссылок, у юсера один все они имеют вид http://adress1.ru/forum/ , у юсера 2 http://forum.adress2.ru/ (правда у меня 3 адреса у форума smile ).

Если не трудно - выложи, плиз smile

Подвал доски

Под управлением FluxBB. Хостинг Hostens