如何将包含IP地址的所有URL重定向到我的www域?

时间:2012-05-11 23:19:33

标签: regex apache mod-rewrite rewrite

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

以下条件与确切的IP匹配:

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

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

4 个答案:

答案 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。

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