我希望当人们使用 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]