Переадресация по IP (Сети)

Тема в разделе "Mod Rewrite / htaccess / ЧПУ", создана пользователем andrewtit, 22 июл 2009.

Статус темы:
Закрыта.
  1. andrewtit

    andrewtit Создатель

    Регистр.:
    19 май 2008
    Сообщения:
    18
    Симпатии:
    4
    Задача в общем-то простая: необходимо настроить переадресацию на другой сайт при попытке доступа из разных сетей.

    Допустим, есть сайт - www.1.ru про доступе к этому сайту из сети 192.168.0.0/16 запрос перенаправляется на www.2.ru.

    Сделана такая конструкция:

    RewriteEngine On
    Options +FollowSymlinks
    RewriteCond %{REMOTE_ADDR} ^192\.168\.[0-9][0-9][0-9]\.[0-9][0-9][0-9]$
    RewriteRule ^/(.*) http://www.2.ru/ [R=301,L]

    Меня интересует следующий вопрос корректно ли указание сети в этой конструкции или следует написать так:

    RewriteCond %{REMOTE_ADDR} ^192\.168\.[0-9]\.[0-9] [OR]
    RewriteCond %{REMOTE_ADDR} ^192\.168\.[0-9]\.[0-9][0-9] [OR]
    RewriteCond %{REMOTE_ADDR} ^192\.168\.[0-9]\.[0-9][0-9][0-9] [OR]
    RewriteCond %{REMOTE_ADDR} ^192\.168\.[0-9][0-9]\.[0-9] [OR]
    RewriteCond %{REMOTE_ADDR} ^192\.168\.[0-9][0-9]\.[0-9][0-9] [OR]
    RewriteCond %{REMOTE_ADDR} ^192\.168\.[0-9][0-9]\.[0-9][0-9][0-9] [OR]
    RewriteCond %{REMOTE_ADDR} ^192\.168\.[0-9][0-9][0-9]\.[0-9] [OR]
    RewriteCond %{REMOTE_ADDR} ^192\.168\.[0-9][0-9][0-9]\.[0-9][0-9] [OR]
    RewriteCond %{REMOTE_ADDR} ^192\.168\.[0-9][0-9][0-9]\.[0-9][0-9][0-9]$

    И возможно ли другое решение этой ситуации через mod_rewrite?
     
  2. ConstNW

    ConstNW Постоялец

    Регистр.:
    30 июн 2007
    Сообщения:
    132
    Симпатии:
    39
    Абсолютно нормально использовать подобные конструкции:
    Код:
    RewriteCond %{REMOTE_ADDR} ^192\.168\.[0-9][0-9][0-9]\.[0-9][0-9][0-9]$
    RewriteCond %{REMOTE_ADDR} ^192\.168\.[0-9]{3}\.[0-9]{3}$
    RewriteCond %{REMOTE_ADDR} ^192\.168\.[0-9]{3}\.(3[2-9]¦[4-5][0-9]¦6[0-3])
    RewriteCond %{REMOTE_ADDR} ^192\.168\.[0-9]{3}\.
    
     
    andrewtit нравится это.
  3. andrewtit

    andrewtit Создатель

    Регистр.:
    19 май 2008
    Сообщения:
    18
    Симпатии:
    4
    А подобное будет корректно работать? В смысле охвата всей сети 192.168.0.0\16?

    RewriteCond %{REMOTE_ADDR} ^192\.168\.

    И что описывает {3} в строке
    RewriteCond %{REMOTE_ADDR} ^192\.168\.[0-9]{3}\.
     
  4. ConstNW

    ConstNW Постоялец

    Регистр.:
    30 июн 2007
    Сообщения:
    132
    Симпатии:
    39
    Да, конечно будет.

    ^192\.168\. == 192.168.0.0\16
    [0-9]{3} == [0-9][0-9][0-9]
     
    andrewtit нравится это.
  5. andrnag

    andrnag

    Регистр.:
    26 мар 2008
    Сообщения:
    350
    Симпатии:
    125
    для маски 192.168.0.0/16 достаточно будет указать вот эту строку:
    RewriteCond %{REMOTE_ADDR} ^192\.168\.[0-9]{3}\.[0-9]{3}$
    Это, на мой взгляд, самое понятная запись.

    Технически она соответствует и строке 192.186.999.999, но таких адресов не бывает, и, в данном случае, допустима такая нестрогость. (Более точно требуется указывать, при валидации строки как ip-адрес, но это другая задача, и она обсуждалась в разделе RegExp. Самое строгое выражение приводил я в этом сообщении. То что второе, найденное в инете)

    Вся сложность заключаетсся в том, что маска подсети может быть сложнее, например /22 или /6 (ну бывают такие извращения, бывают) Вот здесь уже нужно вычислить, какие адреса соответствую такой (нецелой) маске, и уже составлять сложные регулярные выражения по типу приведенных выше. Подробно про маски есть в вике.
     
Статус темы:
Закрыта.