Страница 1 из 1

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

Добавлено: 2009-07-04 5:19:27
ved00n
Исходные данные:
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?

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

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

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

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

Добавлено: 2009-07-04 11:16:30
ved00n
Вся закавыка в том, что сеть домашняя, "полудикая". Единого внутреннего DNS нет. Единого шлюза так же нет, каждый прописывает тот шлюз который ему удобен или его нет вовсе. Компьютеры объеденены в сеть класса B.
Вот такая ситуация.

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

Добавлено: 2009-07-04 11:37:51
zg
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]
хотя работоспособность не гарантирую

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

Добавлено: 2009-07-04 11:46:45
ved00n
Нет, деньги здесь не причем. Суть в том, что у части пользователей локальной сети интернета нет в принципе, поэтому они не могут нормально работать с сайтом.
За пример mod_rewrite спасибо, буду пробовать.

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

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

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

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

Добавлено: 2009-07-04 12:04:37
ved00n
Не утишительно.
А что значит "html фильтровать"?

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

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

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

Добавлено: 2009-07-04 12:21:12
ved00n
Буду разбираться с этим вариантом. Если есть ссылка на толковое разъяснение - буду благодарен.

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

Добавлено: 2009-07-04 14:10:27
zg
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(); не использовать, поскольку буфер автоматически сбрасывается по завершении скрипта

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

Добавлено: 2009-07-05 4:25:50
ved00n
Всё отлично! Вставил вот такой скрипт:

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

<?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");
}
?>
Большое Спасибо за помощь!

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

Добавлено: 2009-07-05 5:41:20
zg
ну гуд, что всё получилось :smile:

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