301 редирект для всех кроме своего IP

Freeman Liberty

Постоялец
Регистрация
19 Май 2009
Сообщения
489
Реакции
173
Добрый день!
Делаю 301 редирект с помощью данной конструкции:
Код:
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} robots.txt$ [NC]
RewriteRule ^([^/]+) $1 [L]

RewriteCond %{HTTP_HOST} ^oldomen\.ru
RewriteRule ^(.*)$ http://newdomen.ru/$1 [R=301,L]
RewriteCond %{HTTP_HOST} ^www.olddomen\.ua
RewriteRule ^(.*)$ http://newdomen.ru/$1 [R=301,L]

Но, хотелось бы оставить возможность по доступу к старому адресу для себя (своего IP).
Буду благодарен за подсказку как реализовать подобное исключение?
 
Код:
Options +FollowSymLinks
RewriteEngine On

RewriteRule ^robots\.txt$ - [L]

RewriteCond %{REMOTE_ADDR} !=11.22.33.44
RewriteCond %{HTTP_HOST}   ^oldomen\.ru|^www\.olddomen\.ua
RewriteRule ^(.*)$ http://newdomen.ru/$1 [R=301,L]
 
Не работает.
Точнее работает для всех IP включая мой
 
Да, естественно.
И домены поменять на свои ))
Не работает.
Пробовал экранировать точки в IP не помогло

Код:
Options +FollowSymLinks
RewriteEngine On
RewriteRule ^robots\.txt$ - [L]
RewriteCond %{REMOTE_ADDR} !=00\.00\.00\.00
RewriteCond %{HTTP_HOST}   ^old\.ru
RewriteRule ^(.*)$ http://new.ru/$1 [R=301,L]
 
Пробовал экранировать точки в IP не помогло
Если в RewriteCond условие начинается с = или !=, то шаблон трактуется не как регулярное выражение, а как обычная строка и проверяется точное совпадение с этой строкой, так что в этом случае нет нужды экранировать точки.
С регуляркой это условие будет выглядеть так: RewriteCond %{REMOTE_ADDR} !^1\.2\.3

В переменной %{REMOTE_ADDR} может быть IP не клиента, а reverse proxy (если в Apache не настроен mod_remoteip или mod_rpaf).
Так что стоит проверить содержимое %{REMOTE_ADDR}.
Создать в корне сайта файл test.php
PHP:
<pre>
<?php print_r($_SERVER); ?>
</pre>
А в .htaccess после RewriteEngine On добавить:
Код:
RewriteRule ^test\.php$ - [L]
Если в REMOTE_ADDR нет нужного адреса, то поискать его в переменных вроде: HTTP_X_FORWARDED_FOR, HTTP_X_REAL_IP.
 
Добрый день!
Делаю 301 редирект с помощью данной конструкции:
Код:
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} robots.txt$ [NC]
RewriteRule ^([^/]+) $1 [L]

RewriteCond %{HTTP_HOST} ^oldomen\.ru
RewriteRule ^(.*)$ http://newdomen.ru/$1 [R=301,L]
RewriteCond %{HTTP_HOST} ^www.olddomen\.ua
RewriteRule ^(.*)$ http://newdomen.ru/$1 [R=301,L]

Но, хотелось бы оставить возможность по доступу к старому адресу для себя (своего IP).
Буду благодарен за подсказку как реализовать подобное исключение?
Попробуйте так:
Код:
RewriteEngine on

RewriteCond expr "! -R '1.1.1.1/32'"
RewriteCond %{HTTP_HOST}   ^oldomen\.ru|^www\.olddomen\.ua
RewriteRule ^(.*)$ http://newdomen.ru/$1 [R=301,L]
 
Назад
Сверху