使用 Apache 将 IP 地址重定向到真实姓名

使用 Apache 将 IP 地址重定向到真实姓名

我希望当人们使用 IP 地址(例如)访问我的 Web 服务器时,http://10.0.0.1将其重定向到域名(例如)http://example.com。我正在使用 Apache Web 服务器,并且我尝试过:

<VirtualHost 10.0.0.1:80>
    Redirect / http://example.com
</VirtualHost>

因为它的优先级比

<VirtualHost *:80>
    ServerName example.com
    ...
</VirtualHost>

这才是我最终想要服务的虚拟主机。

我也尝试过

<VirtualHost 10.0.0.1:80>
    ServerName 10.0.0.1
    Redirect / http://example.com
</VirtualHost>

认为它可能只会匹配http://10.0.0.1但不匹配http://example.com。但它也会产生无限循环。有什么想法可以实现吗?

之所以IP虚拟主机不是主要的和唯一的虚拟主机,是因为我想让服务器上的其他IP也能提供服务example.com

答案1

HD 回答给出了一个很好的重写规则,但你应该在此之前添加一个条件。确保 10.10.10.1 上只有一个虚拟主机在运行,并且你的定义如下所示:

<VirtualHost 10.0.0.1:80>
    ServerName servername.com
    .....

    RewriteCond %{SERVER_NAME} 10.10.10.1
    RewriteRule /(.*) http://servername.com/$1 [R=301,L]

</VirtualHost>

这样,您只需要为该 IP 地址设置一个虚拟主机,而不必像上面那样操作。注意:如果您要在此服务器上设置多个虚拟主机,则需要将其余虚拟主机放在不同的 IP 上

答案2

我尝试了相同的配置,它工作正常。你确定没有其他定义与你的虚拟主机冲突吗?apache 日志中的错误是什么?

这条规则同样适用:

RewriteRule ^(.*)$ http://example.com/$1 [R=301,NC]

答案3

添加.htaccess以下内容:

RewriteCond %{HTTP_HOST} ^123\.123\.123\.123
RewriteRule (.*) http://www.example.com/$1 [R=301,L]

相关内容