Назад | Перейти на главную страницу

Отправить один IP-адрес на определенную страницу с помощью mod_rewrite

Apache на нашем CentOS VDS контролируется хостинговой компанией (из-за предыдущих проблем на общем сервере хостинга). Сайт, который они отслеживают, является онлайн-магазином, и это имеет довольно неприятный побочный эффект: создается впечатление, что в любой момент времени в сети много посетителей. Он также заполняет журналы магазина нерелевантными записями. Все это не критично, но я бы хотел устранить эти проблемы.

Я пытаюсь использовать команды mod_rewrite в файле .htaccess, чтобы перенаправить этот IP-адрес на фиктивную страницу, а не позволить ему войти в магазин. Поиск в Google дает много примеров, но все они предназначены для запросов на конкретную страницу, тогда как в моем случае страница не запрашивается.

Вот что у меня получилось (192.168.0.23 - мой тестовый клиент), но это просто приводит к циклу:

RewriteCond %{REMOTE_HOST} 192\.168\.0\.23
RewriteRule .* /monitor.html [R=301,L]

Этот пример тестируется на моем сервере разработки с использованием wget (с использованием IP-адреса или доменного имени) и приводит к следующему:

H:\>wget http://192.168.0.18
--2011-09-26 09:01:07--  http://192.168.0.18/monitor.html
Connecting to 192.168.0.18:80... connected.

ответ повторяется до тех пор, пока

--2011-09-26 09:01:07--  http://192.168.0.18/monitor.html
Connecting to 192.168.0.18:80... connected.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: http://192.168.0.18/monitor.html [following]
20 redirections exceeded.

Возможно ли то, что я пытаюсь сделать, с помощью mod_rewrite, или мне следует заняться этим другим способом?

tl; dr:

редактировать

Вот содержимое rewrite_log после выполнения другого wget http://192.168.0.18

192.168.0.23 - - [21/Sep/2011:21:27:07 +1000] [192.168.0.18/sid#937eab8][rid#95330f8/initial] (2) [perdir /path/to/website/files/] explicitly forcing redirect with http://192.168.0.18/monitor.html
192.168.0.23 - - [21/Sep/2011:21:27:07 +1000] [192.168.0.18/sid#937eab8][rid#95330f8/initial] (1) [perdir /path/to/website/files/] escaping http://192.168.0.18/monitor.html for redirect
192.168.0.23 - - [21/Sep/2011:21:27:07 +1000] [192.168.0.18/sid#937eab8][rid#95330f8/initial] (1) [perdir /path/to/website/files/] redirect to http://192.168.0.18/monitor.html [REDIRECT/301]
192.168.0.23 - - [21/Sep/2011:21:27:07 +1000] [192.168.0.18/sid#937eab8][rid#9535100/initial] (3) [perdir /path/to/website/files/] strip per-dir prefix: /path/to/website/files/monitor.html -> monitor.html
192.168.0.23 - - [21/Sep/2011:21:27:07 +1000] [192.168.0.18/sid#937eab8][rid#9535100/initial] (3) [perdir /path/to/website/files/] applying pattern '^/monitor\.html$' to uri 'monitor.html'
192.168.0.23 - - [21/Sep/2011:21:27:07 +1000] [192.168.0.18/sid#937eab8][rid#9535100/initial] (4) [perdir /path/to/website/files/] RewriteCond: input='192.168.0.23' pattern='192\.168\.0\.23' => matched
192.168.0.23 - - [21/Sep/2011:21:27:07 +1000] [192.168.0.18/sid#937eab8][rid#9535100/initial] (2) [perdir /path/to/website/files/] rewrite 'monitor.html' -> '/monitor.html'
192.168.0.23 - - [21/Sep/2011:21:27:07 +1000] [192.168.0.18/sid#937eab8][rid#9535100/initial] (2) [perdir /path/to/website/files/] explicitly forcing redirect with http://192.168.0.18/monitor.html
192.168.0.23 - - [21/Sep/2011:21:27:07 +1000] [192.168.0.18/sid#937eab8][rid#9535100/initial] (1) [perdir /path/to/website/files/] escaping http://192.168.0.18/monitor.html for redirect
192.168.0.23 - - [21/Sep/2011:21:27:07 +1000] [192.168.0.18/sid#937eab8][rid#9535100/initial] (1) [perdir /path/to/website/files/] redirect to http://192.168.0.18/monitor.html [REDIRECT/301]

Hopfuly кто-то может понять это. Насколько я могу судить, он думает monitor.html <> monitor.html.

RewriteEngine On
RewriteCond %{REMOTE_ADDR} 192\.168\.0\.23
RewriteCond %{REQUEST_URI} !/monitor\.html$
RewriteRule $ /monitor.html [R=301,L]

~

Просто не перенаправляйте, когда запрашиваемая страница является страницей мониторинга:

RewriteCond %{REMOTE_HOST} ^192\.168\.0\.23$
RewriteRule !^monitor\.html$ /monitor.html [R=301,L]

(отредактировано для .htaccess контекст и точное соответствие IP-адреса хоста)