Помогите разобраться в mod_rewrite

Проблемы установки, настройки и работы Правильной Операционной Системы

Модератор: terminus

Правила форума
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
ved00n
рядовой
Сообщения: 26
Зарегистрирован: 2009-05-03 15:32:48

Помогите разобраться в mod_rewrite

Непрочитанное сообщение ved00n » 2009-07-04 5:19:27

Исходные данные:
FreeBSD 7.2-RELEASE
Apache 2.2.11

В локальной сети находится веб-сервер на котором крутится сайт доступный для интернета по адресу xxxxxx.ru. Пользователи локальной сети заходят на этот сайт по адресу 10.10.10.10. Но не могут по нему нормально передвигаться т.к. на сайте есть абсолютные ссылки тип xxxxxx.ru\razdel\index.php. Поэтому хотелось бы сделать так, чтобы если пользователь локальной сети нажимает подобную ссылку, то xxxxxx.ru автоматически бы заменялось на 10.10.10.10. Возможно ли такое с помощью mod_rewrite?

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: Помогите разобраться в mod_rewrite

Непрочитанное сообщение zg » 2009-07-04 10:47:05

ved00n писал(а):Возможно ли такое с помощью mod_rewrite?
это делается проще - для локальный зоны адерс xxxxxx.ru резолвится как 10.10.10.10 и никаких проблем нет. Делается это через настройку ДНС. Через мод_реврайт я бы не стал рисковать, хотя в теории можно.

а вообще как сеть пострена, локальные пользователи через шлюз ходят?

ved00n
рядовой
Сообщения: 26
Зарегистрирован: 2009-05-03 15:32:48

Re: Помогите разобраться в mod_rewrite

Непрочитанное сообщение ved00n » 2009-07-04 11:16:30

Вся закавыка в том, что сеть домашняя, "полудикая". Единого внутреннего DNS нет. Единого шлюза так же нет, каждый прописывает тот шлюз который ему удобен или его нет вовсе. Компьютеры объеденены в сеть класса B.
Вот такая ситуация.

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: Помогите разобраться в mod_rewrite

Непрочитанное сообщение zg » 2009-07-04 11:37:51

ved00n писал(а):Единого внутреннего DNS нет.
тогда надо поднять или пускай hosts прописывают. Я так понимаю, что тут просто деньги завязаны на основе ip. Если да, то просто надо повесить инструкцию, мол чтобы трафик был локальным выполните под виндой

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

notepad %systemroot%\system32\drivers\etc\hosts
и пропишите

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

10.10.10.10 хххххх.ru
Не знаю, как в висте и семёрке, в xp прокатит.

если уж хочется на mod_rewrite извратиться, тогда сюда http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html
ну и примерно так должно выглять

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

RewriteCond %{REMOTE_ADDR}  ^10.10.10.*  [OR]
RewriteCond %{REMOTE_ADDR}  ^xxx.xxx.xxx.*
RewriteRule  имя_домена.ru http://10.10.10.10/?%{QUERY_STRING} [L,R]
хотя работоспособность не гарантирую

ved00n
рядовой
Сообщения: 26
Зарегистрирован: 2009-05-03 15:32:48

Re: Помогите разобраться в mod_rewrite

Непрочитанное сообщение ved00n » 2009-07-04 11:46:45

Нет, деньги здесь не причем. Суть в том, что у части пользователей локальной сети интернета нет в принципе, поэтому они не могут нормально работать с сайтом.
За пример mod_rewrite спасибо, буду пробовать.

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: Помогите разобраться в mod_rewrite

Непрочитанное сообщение zg » 2009-07-04 11:53:56

ved00n писал(а):Суть в том, что у части пользователей локальной сети интернета нет в принципе, поэтому они не могут нормально работать с сайтом.
но суть однако с hosts не меняется.
ved00n писал(а):За пример mod_rewrite спасибо, буду пробовать.
он кстати всё равно не будет работать. Ведь, если клиент не занет адреса домена, то и на сервак не попадёт, а значит и реврайт не сработает. :pardon:

Поэтому тут либо html фильтровать либо домен резолвить локально.

ved00n
рядовой
Сообщения: 26
Зарегистрирован: 2009-05-03 15:32:48

Re: Помогите разобраться в mod_rewrite

Непрочитанное сообщение ved00n » 2009-07-04 12:04:37

Не утишительно.
А что значит "html фильтровать"?

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: Помогите разобраться в mod_rewrite

Непрочитанное сообщение zg » 2009-07-04 12:10:18

ved00n писал(а):А что значит "html фильтровать"?
весь исходящий html-код пропускать через фильтр, который на основе адреса посетителя будет заменять http://домен.ru на http://10.10.10.10 к примеру. Если сайт написан на php, то делается это легко и просто через функцию ob_start().

ved00n
рядовой
Сообщения: 26
Зарегистрирован: 2009-05-03 15:32:48

Re: Помогите разобраться в mod_rewrite

Непрочитанное сообщение ved00n » 2009-07-04 12:21:12

Буду разбираться с этим вариантом. Если есть ссылка на толковое разъяснение - буду благодарен.

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: Помогите разобраться в mod_rewrite

Непрочитанное сообщение zg » 2009-07-04 14:10:27

ved00n писал(а):Если есть ссылка на толковое разъяснение - буду благодарен.
http://ru2.php.net/manual/ru/function.ob-start.php там же и пример есть

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

<?php

function callback($buffer)
{
  // replace all the apples with oranges
  return (str_replace("apples", "oranges", $buffer));
}

ob_start("callback");

?>
<html>
<body>
<p>It's like comparing apples to oranges.</p>
</body>
</html>
<?php

ob_end_flush();

?>
можно кстати ob_end_flush(); не использовать, поскольку буфер автоматически сбрасывается по завершении скрипта

ved00n
рядовой
Сообщения: 26
Зарегистрирован: 2009-05-03 15:32:48

Re: Помогите разобраться в mod_rewrite

Непрочитанное сообщение ved00n » 2009-07-05 4:25:50

Всё отлично! Вставил вот такой скрипт:

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

<?php

function net_match ( $network , $ip ) {
$ip_arr = explode ( '/' , $network );
$network_long = ip2long ( $ip_arr [ 0 ]);

$x = ip2long ( $ip_arr [ 1 ]);
$mask = long2ip ( $x ) == $ip_arr [ 1 ] ? $x : 0xffffffff << ( 32 - $ip_arr [ 1 ]);
$ip_long = ip2long ( $ip );

    // echo ">".$ip_arr[1]."> ".decbin($mask)."\n";
return ( $ip_long & $mask ) == ( $network_long & $mask );
}

//Если IP пользователя не входит в диапазон локальной сети, то всё остается без изменений.
if(net_match ( '10.0.0.0/8' , $_SERVER['REMOTE_ADDR'] )){
    function callback($buffer)
{
  return (str_replace("xxxxxx.ru", "10.10.10.10", $buffer));
}
ob_start("callback");
}
?>
Большое Спасибо за помощь!

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: Помогите разобраться в mod_rewrite

Непрочитанное сообщение zg » 2009-07-05 5:41:20

ну гуд, что всё получилось :smile:

кстати, если интересно, http://anton-pribora.ru/articles/php/php-net-mask/