我们的 CentOS VDS 上的 Apache 正在由托管公司监控(由于以前在共享托管服务器上出现过问题)。他们监控的站点是一个在线商店,这带来了一个相当不幸的副作用,即让它看起来好像在任何特定时刻都有许多访问者在线。它还会用不相关的条目填充商店的日志。这些都不是关键问题,但我想消除这些问题。
我尝试使用 .htaccess 文件中的 mod_rewrite 命令将该 IP 地址重定向到虚拟页面,而不是让其进入商店。谷歌搜索产生了很多示例,但它们都是针对特定页面的请求,而在我的例子中没有请求任何页面。
这是我最终得到的结果(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 来实现这个功能吗?或者我应该用其他方法解决这个问题?
总结:
- 我需要将来自特定 IP 地址的任何请求重定向到虚拟页面
- 响应必须来自 Web 服务器,因为这是正在监控的
编辑
这是执行另一次 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]
希望有人能理解它。据我所知,它认为monitor.html
<> monitor.html
。
答案1
RewriteEngine On
RewriteCond %{REMOTE_ADDR} 192\.168\.0\.23
RewriteCond %{REQUEST_URI} !/monitor\.html$
RewriteRule $ /monitor.html [R=301,L]
~
答案2
当请求的页面是监控页面时不要重定向:
RewriteCond %{REMOTE_HOST} ^192\.168\.0\.23$
RewriteRule !^monitor\.html$ /monitor.html [R=301,L]
(针对.htaccess
上下文和精确的主机 IP 匹配进行了编辑)