Автор Тема: Apache, редирект  (Прочитано 1816 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Faust

  • Ветеран
  • *****
  • Сообщений: 4302
  • Карма: 107
  • Пол: Мужской
  • Bla-bla-bla, mr. Freeman...
    • Просмотр профиля
Apache, редирект
« : 18.02.09, 11:19:26 »
Необходимо с определенных ИП адресов сделать переадресацию на другой сайт.
Например, при обращении к сайту пользователя с ИП адресом 192.168.0.10 надо открыть другую папку на сервере, содержащую другой сайт.
Нашел только редирект для ИП на другой сайт:

Показ разных страниц, в зависимости от IP адреса посетителя:
SetEnvIf REMOTE_ADDR <нужный ip адрес> REDIR="redir"
RewriteCond %{REDIR} redir
RewriteRule ^/$ /another_page.html

Например, перенаправление посетителей с ip адресом 192.12.131.1 на страницу about_my_sity.html:
SetEnvIf REMOTE_ADDR 192.12.131.1 REDIR="redir"
RewriteCond %{REDIR} redir
RewriteRule ^/$ /about_my_sity.html


В моем случае должно выглядеть так:
SetEnvIf REMOTE_ADDR 192.168.0.10 REDIR="redir"
RewriteCond %{REDIR} redir
RewriteRule ^/$ www.yandex.ru

Только служба апача выдает внутреннюю ошибку приложения и сворачивается =/
Что не так с синтаксисом? Пишу в раздел редиректа...
А лучше бы редирект не на сайт, а на папку htdocs1  к примеру..


Оффлайн Оrange

  • Постоялец
  • ***
  • Сообщений: 181
  • Карма: 30
  • Пол: Мужской
    • Просмотр профиля
Re: Apache, редирект
« Ответ #1 : 18.02.09, 11:35:13 »
так а че в логах пишется?
mod_rewrite включен?

Оффлайн Faust

  • Ветеран
  • *****
  • Сообщений: 4302
  • Карма: 107
  • Пол: Мужской
  • Bla-bla-bla, mr. Freeman...
    • Просмотр профиля
Re: Apache, редирект
« Ответ #2 : 18.02.09, 11:38:52 »
так а че в логах пишется?
mod_rewrite включен?
LoadModule rewrite_module modules/mod_rewrite.so
В логах винды пишет, что произошла внутрення ошибка приложения.
Если запускать через батник, то пишет, наберите NET HELP что-то там, в общем, в итоге говорит, что обратится к разработчику приложения...

Волшебным образом пнул, запустился таки сервис, но не редиректит.....=/ (ctrl+s забыл ткнуть  :al:)
« Последнее редактирование: 18.02.09, 11:46:50 от Faust »

Оффлайн Faust

  • Ветеран
  • *****
  • Сообщений: 4302
  • Карма: 107
  • Пол: Мужской
  • Bla-bla-bla, mr. Freeman...
    • Просмотр профиля
Re: Apache, редирект
« Ответ #3 : 18.02.09, 12:34:39 »
SetEnvIf REMOTE_ADDR 192.168.0.* REDIR="redir"
RewriteCond %{REDIR} redir
RewriteRule ^/$ /ip1.htm

ip1.htm лежит в корне, в папке htdocs
Обращаюсь с ИП адресов 192,168,0,35 и 192,168,0,100. Апач на 192,168,0,35. Все равно открывает index.htm
ппц..может какую мелочь упускаю..

Оффлайн Meister

  • Постоялец
  • ***
  • Сообщений: 136
  • Карма: 12
  • Пол: Мужской
    • Просмотр профиля
Re: Apache, редирект
« Ответ #4 : 18.02.09, 18:34:21 »
SetEnvIf REMOTE_ADDR 192.168.0.* REDIR="redir"
RewriteCond %{REDIR} redir
RewriteRule ^/$ /ip1.htm

ip1.htm лежит в корне, в папке htdocs
Обращаюсь с ИП адресов 192,168,0,35 и 192,168,0,100. Апач на 192,168,0,35. Все равно открывает index.htm
ппц..может какую мелочь упускаю..

Как я понимаю, в примере, который вы нашли, смысл такой: если IP адрес совпадает с шаблоном, то установить значение переменной REDIR="redir", затем если переменная REDIR равна "redir", то переделать URL. Какой-то странный пример. RewriteCond может сам на основе IP работать, вместо %{REDIR} надо указывать %{REMOTE_HOST}, зачем делать двойную работу с установкой переменной?

Попробуйте вот это:

RewriteCond   %{REMOTE_HOST}  192.168.0.*
RewriteRule   ^/$           /ip1.html

Более подробно можете почитать здесь:
http://httpd.apache.org/docs/2.2/rewrite/rewrite_intro.html

В вашем примере конкретно ошибка вот здесь:
вместо
RewriteCond %{REDIR} redirнадо
RewriteCond %{ENV:REDIR} redir
Из-за чего ещё может не работать:
а) не включён модуль переписывания (LoadModule есть, а директивы RewriteEngine On нет);
б) если всё-таки решите сделать через SetEnvIf, то проверьте, загружен ли модуль `mod_setenvif.so'
б) если вы используете виртуальный хостинг, то настройки надо вписывать в тот виртуальный хост, в котором делается отсеивание по IP адресу при обращении.

P.S. Я рассказал для Apache 2.2 под Linux, в принципе для Windows то же самое всё, не должно быть отличий.