4

我有几台具有不同 IP 地址的服务器。我想让它无法通过 IP 直接联系到他们。相反,我希望他们重定向到我的域 www.site.com。

以下条件与确切 IP 匹配:

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

如何使用 Apache 重写规则匹配任何IP?

4

4 回答 4

8

请注意,您使用了错误的标签。它不是 REMOTE_HOST,因为这是用户的 ip。您需要 HTTP_HOST 来获取服务器的 IP。

例如::

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

编辑,您可以根据需要使用更具体的正则表达式。主要问题是您的原始标签。

编辑2:

如果您有要重定向的特定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]
于 2012-05-11T23:21:21.320 回答
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 次。

于 2012-05-11T23:25:39.767 回答
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]
于 2015-12-17T09:17:02.313 回答
0

如果 Apache 收到一个请求,其中没有明确的 ServerName 或 ServerAlias 匹配的 VirtualHost,它会将所有这些请求定向到定义的第一个 VirtualHost。

我会设置一个单独的默认虚拟主机,并在其中拥有所有“不匹配的请求”功能。

于 2012-05-11T23:27:33.340 回答