Apache2 无法在 Ubuntu 19.04(虚拟主机)上使用多个子域(仅一个)

Apache2 无法在 Ubuntu 19.04(虚拟主机)上使用多个子域(仅一个)

所以我遇到了 Apache 2 (2.4.38) 虚拟主机问题。我已成功设置了两个虚拟主机,一个用于我的实际域(即 example.com),另一个用于子域(blog.example.com)。然后我尝试为另一个子域创建一个新的虚拟主机(我们称之为 sub.example.com),但出于某种原因,它总是重定向到第一个子域,即 blog.example.com。

.conf我的目录中每个子域名都有一个文件/etc/apache2/sites-available,它们都已使用 启用a2ensite,并且default.conf已使用 禁用a2disconf。我还设置了适当的 A 记录。

我看到几个不同的人说添加NameVirtualHost可以解决这个问题,但它似乎已经被弃用并且没有任何功能。

我的.conf文件如下所示,其中example.com是我的实际域:

<VirtualHost *:80>
    ServerAdmin [email protected]
    ServerName blog.example.com
    DocumentRoot /var/www/blog.example.com
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
    RewriteEngine on
    RewriteCond %{SERVER_NAME} =blog.example.com
    RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

我的其他子域的配置看起来完全相同,但带有DocumentRootServerNameRewriteCond,以反映其不同的位置和名称。重新启动服务器本身或 Apache2(并等待几天,以防正确设置 A 记录需要一段时间)似乎也没有任何效果。

我在网上查到的所有东西似乎都没有和我遇到同样的问题;我确实找到了一些,但是那些东西说可以通过指令来缓解<NameVirtualHost>,但对我来说指令没有任何作用。

不幸的是,我对 Apache2 还很陌生,所以如果这里有人知道如何让它正常工作,我将不胜感激。

先感谢您!

问候,马文

答案1

作为替代建议 - 您实际上不需要为每个域单独配置重定向配置 - 您可以使用通配符。这是我们为此定义的虚拟主机:

<VirtualHost *:80>
   # This acts as a catchall for subdomains being accessed on HTTP
   # it forces a redirect to HTTPS.

   ServerName vhbootstraphttps.example.com

   ServerAlias *.example.com

   RewriteEngine On

   RewriteCond %{HTTPS} !=on
   RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]

</VirtualHost>

注意:对于通配符,您需要使用ServerAlias

相关内容