所以我遇到了 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>
我的其他子域的配置看起来完全相同,但带有DocumentRoot
,ServerName
和RewriteCond
,以反映其不同的位置和名称。重新启动服务器本身或 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