Mod-Rewrite

使用 mod_rewrite 將單個 IP 地址發送到特定頁面

  • November 3, 2021

託管公司正在監控我們 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 匹配進行了編輯)

引用自:https://serverfault.com/questions/315388