Mod-Rewrite
使用 mod_rewrite 將單個 IP 地址發送到特定頁面
託管公司正在監控我們 CentOS VDS 上的 Apache(由於之前在共享託管伺服器上的問題)。他們正在監視的站點是一個線上商店,這具有相當不幸的副作用,即在任何給定時刻看起來好像有許多線上訪問者。它還用不相關的條目填充商店的日誌。這些都不是關鍵,但我想消除這些問題。
我正在嘗試使用 .htaccess 文件中的 mod_rewrite 命令將該 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;博士:
- 我需要將來自特定 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
。
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 匹配進行了編輯)