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

Pab*_*blo 5 redirect virtualhost apache-2.2

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

<VirtualHost 10.0.0.1:80>
    Redirect / http://example.com
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

它生成了一个无限重定向循环,因为它的优先级高于

<VirtualHost *:80>
    ServerName example.com
    ...
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

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

我也试过

<VirtualHost 10.0.0.1:80>
    ServerName 10.0.0.1
    Redirect / http://example.com
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

认为也许它只会匹配http://10.0.0.1但不会匹配http://example.com。但它也会产生无限循环。任何想法如何实现这一目标?

IP虚拟主机之所以不是主要且唯一的虚拟主机,是因为我希望服务器上的其他IP也能够服务example.com

小智 6

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>
Run Code Online (Sandbox Code Playgroud)

这样,您只需要一个虚拟主机作为该 IP 地址,而不是您在上面尝试执行的操作。注意:如果您要在此服务器上拥有多个虚拟主机,则需要将其余虚拟主机放在不同的 IP 上

  • 重写条件不应该尝试匹配虚拟主机 ip,比如 10.0.0.1 而不是 10.10.10.1?为什么其他虚拟主机需要在不同的 IP 中运行?他们不会按名称而不是 IP 匹配吗? (2认同)

hda*_*iel 1

我尝试相同的配置,效果很好。您确定没有其他定义与您的虚拟主机冲突吗?apache 日志中的错误是什么?

这个规则也有效:

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