使用mod_rewrite将单个IP地址发送到特定页面

我们的CentOS VDS上的Apache正受到托pipe公司的监控(由于之前在共享托pipe服务器上的问题)。 他们正在监控的网站是一个在线商店,而且这样做有一个相当不幸的副作用,就是在任何特定时刻,看起来好像有众多的访问者在线。 它也用不相关的条目填满商店的日志。 这些都不是关键,但我想消除这些问题。

我试图在.htaccess文件中使用mod_rewrite命令将一个IP地址redirect到一个虚拟页面,而不是让它进入商店。 谷歌search产生了很多例子,但他们都是为了一个特定的页面的请求,而在我的情况下,没有页面被要求。

这是我结束了(192.168.0.23是我的testing客户端),但它只是导致一个循环:

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

此示例正在使用wget(使用IP地址或域名)在我的开发服务器上进行testing,结果如下:

 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;博士:

  • 我需要将来自特定IP地址的任何请求redirect到虚拟页面
  • 响应必须来自Web服务器,因为这是被监视的

编辑

这是执行另一个wget http://192.168.0.18后的rewrite_log的内容

 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] 

当请求的页面是监控页面时,请不要redirect:

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

(编辑.htaccess上下文和确切的主机IP匹配)