Реврайт без редиректа для определеных айпи

Обсуждение любых вопросов связанных с файлами конфигурации .htaccess

Реврайт без редиректа для определеных айпи

Сообщение Milli on » Вс фев 05, 2017 6:10 pm

Добрый вечер уважаемые обитатели форума! Уже несколько дней не могу решить такую задачу. Подмена html для определенных ип средствами .htaccess. Методами проб и ошибок получил вот такой результат по моему мнению он верный, но не могу понять почему происходит редерект в место подмены. Уже думал может не в ту директорию код поместил... Помогите с решение задачи, готов заплатить символическую плату
Код: выделить все
RewriteEngine on
RewriteCond %{REMOTE_ADDR} 97.241.170.138
RewriteCond %{REQUEST_URI} !http://test215.tk/test/
RewriteRule .* http://test215.tk/ [L]
Milli on
 
Сообщений: 2
Зарегистрирован: Вс фев 05, 2017 5:57 pm
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0

Сообщение Emilien » Пн фев 06, 2017 5:53 am

Код: выделить все
RewriteRule .* http://test215.tk/ [L]

Когда адрес назначения начинается c http://, https:// или ftp:// это трактуется как внешняя ссылка и выполняется редирект т.е. аналогично добавлению флага [R].
Для внутреннего перенаправления нужно использовать относительный адрес вроде /page.html.

В переменной %{REQUEST_URI} содержится не вся ссылка целиком http://test215.tk/test/, а только путь /test/.
Имя домена находится в %{HTTP_HOST}.

По умолчанию шаблон применяется как регулярное выражение и если не указать маркеры начала и конца строки ^ $, то совпадение
может быть не с целой строкой, а только с частью строки.

RewriteCond %{REMOTE_ADDR} 97.241.170.138
Такая конструкция найдёт совпадение в адресе 197.241.170.138 и ещё нужно учитывать, что в регулярном выражении точке соответствует любой символ.

RewriteCond %{REMOTE_ADDR} 97.2.1.138
Такой шаблон совпадёт с 97.241.138, 97.231.138 и т.д.
Так что желательно тут экранировать точку и указать начало и конец строки.
RewriteCond %{REMOTE_ADDR} ^97\.2\.1\.138$

RewriteCond %{REMOTE_ADDR} =97.2.1.138
Если перед шаблоном поставить знак равно, то он сравнивается как обычная строка, а не как регулярное выражение.
Тогда отпадает необходимость в \. ^ $.

Ну и ещё иногда против зацикливания перенаправления нужно добавить RewriteCond %{ENV:REDIRECT_STATUS} ^$
Пример для нескольких ip 97.241.170.15, 97.241.170.40, 97.241.170.180
Код: выделить все
RewriteEngine on

RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{REMOTE_ADDR} ^97\.241\.170\.(15|40|180)$
RewriteCond %{REQUEST_URI} !/test/
RewriteRule .* / [L]
Emilien
Мл. Сержант
 
Сообщений: 51
Зарегистрирован: Чт дек 10, 2015 3:35 am
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0

Сообщение Milli on » Пн фев 06, 2017 2:06 pm

Спасибо за ответ, но ваш код выдает 500 ошибку.
Milli on
 
Сообщений: 2
Зарегистрирован: Вс фев 05, 2017 5:57 pm
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0


Вернуться в Htaccess

Кто сейчас на форуме

Зарегистрированные пользователи: нет зарегистрированных пользователей

cron