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

Статус
В этой теме нельзя размещать новые ответы.

andrewtit

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

Допустим, есть сайт - Для просмотра ссылки Войди или Зарегистрируйся про доступе к этому сайту из сети 192.168.0.0/16 запрос перенаправляется на Для просмотра ссылки Войди или Зарегистрируйся.

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

RewriteEngine On
Options +FollowSymlinks
RewriteCond %{REMOTE_ADDR} ^192\.168\.[0-9][0-9][0-9]\.[0-9][0-9][0-9]$
RewriteRule ^/(.*) Для просмотра ссылки Войди или Зарегистрируйся [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?
 
Абсолютно нормально использовать подобные конструкции:
Код:
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}\.
 
А подобное будет корректно работать? В смысле охвата всей сети 192.168.0.0\16?

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

И что описывает {3} в строке
RewriteCond %{REMOTE_ADDR} ^192\.168\.[0-9]{3}\.
 
Да, конечно будет.

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

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

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