因此访问我的网站example.com
可以按预期进行。我成功配置了重定向,因此abc.example.com
将重定向到example.com/abc
。
配置文件如下所示abc.example.com.conf
:
<VirtualHost *:80>
ServerName abc.example.com
RedirectPermanent / https://example.com/abc
</VirtualHost>
我的问题:
当我通过在浏览器中输入原始 IP 地址访问我的网站时,我也会被重定向到,example.com/abc
这不是我想要的行为。浏览器中的原始 IP 应该会将我重定向到example.com
文件如下example.com.conf
:
<VirtualHost *:80>
ServerName example.com
ServerAlias example.com
DocumentRoot /var/www/example.com/public_html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
RewriteEngine on
RewriteCond %{SERVER_NAME} =example.com [OR]
RewriteCond %{SERVER_NAME} =www.example.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
我需要进行哪些更改以便当我输入我的 IP 地址时example.com
能够获得服务而不是abc.example.com
?
答案1
这是因为您的一个虚拟主机充当了默认虚拟主机。当ServerName
服务器级别(即不在块中VirtualHost
)与 中的一个匹配时VirtualHost
,该虚拟主机将成为默认虚拟主机。如果没有设置,则通常是第一个虚拟主机。
假设您正在使用全 vhost 配置,答案是在 vhost 块之外设置ServerName example.com
(和相应的)。Listen
参考:https://httpd.apache.org/docs/2.4/vhosts/name-based.html
主要宿主消失
任何与现有请求不匹配的请求都由全局服务器配置处理,无论主机名或服务器名称如何。
当您将基于名称的虚拟主机添加到现有服务器,并且虚拟主机参数与预先存在的 IP 和端口组合匹配时,请求现在将由显式虚拟主机处理。在这种情况下,通常明智的做法是创建一个默认虚拟主机,其 ServerName 与基本服务器的 ServerName 匹配。然后可以将具有相同接口和端口但需要单独配置的新域添加为后续(非默认)虚拟主机。