我有幾臺不同IP地址的服務器。我想讓它無法通過IP直接聯繫到他們。相反,我希望他們重定向到我的域名www.site.com。如何將包含IP地址的所有URL重定向到我的www域?
以下條件相匹配的確切IP:
RewriteCond %{REMOTE_HOST} !^123\.456\.789\.012$
我怎樣才能匹配使用Apache重寫規則的任何 IP?
我有幾臺不同IP地址的服務器。我想讓它無法通過IP直接聯繫到他們。相反,我希望他們重定向到我的域名www.site.com。如何將包含IP地址的所有URL重定向到我的www域?
以下條件相匹配的確切IP:
RewriteCond %{REMOTE_HOST} !^123\.456\.789\.012$
我怎樣才能匹配使用Apache重寫規則的任何 IP?
請注意,您使用的是錯誤的標籤。這不是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]
如果正則表達式是你所需要的,你可以嘗試更換!^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次。
如果Apache接收到有虛擬主機的請求,它沒有明確的ServerName或ServerAlias匹配,它將所有這些請求引導到已定義的第一個VirtualHost。
我會設置一個單獨的默認虛擬主機,並具有所有「不匹配的請求」功能。
稍微比@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]
+1,但確實能'[R = 301,L]'在RewriteRule中。 – anubhava