我有一个用于开发的家庭服务器,我遇到的一个问题是,有时我输入一个网址,它会加载错误的网站,
例如:
因此我去查看了 Apache 正在加载的所有内容:
VirtualHost 配置:
*:443 是一个 NameVirtualHost
默认服务器 dev.demoapp.com(/etc/apache2/sites-enabled/dev.demoapp.com.conf:1)
端口 443 namevhost dev.demoapp.com (/etc/apache2/sites-enabled/dev.demoapp.com.conf:1)
端口 443 namevhost dev.test.com (/etc/apache2/sites-enabled/dev.test.com.conf:1)
*:80 是一个 NameVirtualHost
默认服务器 dev.mysite.com(/etc/apache2/sites-enabled/dev.mysite.com.conf:1)
端口 80 namevhost dev.mysite.com(/etc/apache2/sites-enabled/dev.mysite.com.conf:1)
端口 80 namevhost dev.local.com(/etc/apache2/sites-enabled/dev.local.com.conf:1)
我注意到某些网站出现了两次,但我不知道这是怎么回事。
我怎样才能做到这一点http://dev.mysite.com要么重定向到 https,要么直接告诉用户这是一个无效的 URL(最好诚实地重定向)
答案1
您必须定义一个单独的<VirtualHost *:80>
容器,或者在适当的现有 VirtualHost 容器中ServeName /dev.demoapp.com
添加一行。ServerAlias /dev.demoapp.com
<VirtualHost ..>
除非您使用端口通配符,否则您不能在一个容器中为同一个 VirtualHosts 提供不同的端口。
我通常使用包含文件来处理 VirtualHosts 之间共享的所有指令,并且只将特定指令(如 SSL*)放在各个<VirtualHost ..:443>
指令中(我甚至将每个 VIrtualHost 放在单独的包含文件中。)
从 Apache httpd-2.3.11 开始,不再有有效的 NameVirtualHost 指令(任何时候在多个虚拟主机中使用 IP 地址和端口组合时,都会自动为该地址启用基于名称的虚拟主机 -http://httpd.apache.org/docs/2.4/mod/core.html#namevirtualhost)
此外,没有 DEFAULT VirtualHost,<VirtualHost>
找到的第一个指令实际上是默认值,这意味着所有客户端请求,其 HTTP_HOST 标头未明确定义为ServerName
或ServerAlias
在单独定义中<VirtualHost>
,都将提供第一个 Virualhost 配置。
如果您想要实现“默认”VirtualHost,您可以在<VirtualHost *:80>
包含任何其他文件(之前或其他)之前将容器放入中央 httpd.conf 文件中IncludeOptional /etc/apache2/sites-enabled/*.conf
,或者编写位于列表顶部的 vhost 包含文件,例如 0_default-vhost.conf,带有<VirtualHost *:*>
或<VirtualHost *>
,请尝试哪一个可行。