apache2 ip重定向与子域名重定向冲突

apache2 ip重定向与子域名重定向冲突

因此访问我的网站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 匹配。然后可以将具有相同接口和端口但需要单独配置的新域添加为后续(非默认)虚拟主机。

相关内容