我有几台具有不同IP地址的服务器。我想让它无法通过IP直接与他们联系。相反,我希望他们重定向到我的域名www.site.com。
以下条件与确切的IP匹配:
RewriteCond %{REMOTE_HOST} !^123\.456\.789\.012$
如何使用Apache重写规则匹配任何 IP?
答案 0 :(得分:7)
注意,您使用的是错误的标签。它不是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 :(得分:2)
如果您需要正则表达式,则可以尝试将!^123\.456\.789\.012$
替换为:
!^[0-9]{0,3}\.[0-9]{0,3}\.[0-9]{0,3}\.[0-9]{0,3}$
这将匹配0-9(数字字符)之间的字符,每个字面点之间的0到3次,3点之间的4次。
答案 2 :(得分: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]
答案 3 :(得分:0)
如果Apache收到有VirtualHosts的请求,但它没有明确的ServerName或ServerAlias匹配,则会将所有这些请求定向到已定义的第一个VirtualHost。
我会设置一个单独的默认虚拟主机,并在那里拥有所有“不匹配的请求”功能。