2012-05-11 54 views
3

我有幾臺不同IP地址的服務器。我想讓它無法通過IP直接聯繫到他們。相反,我希望他們重定向到我的域名www.site.com。如何將包含IP地址的所有URL重定向到我的www域?

以下條件相匹配的確切IP:

RewriteCond %{REMOTE_HOST} !^123\.456\.789\.012$ 

我怎樣才能匹配使用Apache重寫規則的任何 IP?

回答

6

請注意,您使用的是錯誤的標籤。這不是REMOTE_HOST,因爲這是用戶的IP。您需要HTTP_HOST來獲取服務器的IP。

例如::

Options +FollowSymlinks 
RewriteEngine On 
RewriteCond %{HTTP_HOST} ^\d+\. 
RewriteRule (.*) http://www.example.com/$1 [R=301] 

編輯,你可以用一個更具體的正則表達式,如果你想。主要問題是您的原始標籤。

EDIT2:

如果你有你想要然後重定向具體 IP地址的列表,你可以使用

Options +FollowSymlinks 
RewriteEngine On 
RewriteCond %{HTTP_HOST} ^111\.111\.111\.111 [OR] 
RewriteCond %{HTTP_HOST} ^222\.222\.222\.222 
RewriteRule (.*) http://www.example.me/$1 [R=301] 
+1

+1,但確實能'[R = 301,L]'在RewriteRule中。 – anubhava

2

如果正則表達式是你所需要的,你可以嘗試更換!^123\.456\.789\.012$通過:

!^[0-9]{0,3}\.[0-9]{0,3}\.[0-9]{0,3}\.[0-9]{0,3}$ 

這將匹配0-9(數字字符s)在每個文字點之間從0到3倍,在3個點之間4次。

0

如果Apache接收到有虛擬主機的請求,它沒有明確的ServerName或ServerAlias匹配,它將所有這些請求引導到已定義的第一個VirtualHost。

我會設置一個單獨的默認虛擬主機,並具有所有「不匹配的請求」功能。

1

稍微比@Fabrício-Matté的完整。 它會捕獲任何IP並將其轉換爲特定的域名。 這是特別是如果你不知道哪個IP用戶將使用有用的(例如,當你有一個以上的IP,如內部和外部的IP地址):

RewriteEngine on 
RewriteCond %{HTTP_HOST} ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ 
RewriteRule ^(.*)$ http://www.example.com$1 [L,R=301] 
相關問題