带有通配符的 Apache 命名虚拟主机

Der*_*ins 7 virtualhost apache-2.2

我想将 www.example.com 映射到特定的虚拟主机,然后我希望 example.com 的所有其他子域都转到另一个虚拟主机。

为此,我创建了这些主机:

<VirtualHost *:80>
  ServerName www.example.com
</VirtualHost>

<VirtualHost *:80>
  ServerName example.com
  ServerAlias *.example.com
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

现在选择服务哪个主机似乎相当随机。如果我有时重新启动 apache,我会得到一个主机,有时会得到另一个。

我究竟做错了什么?

谢谢!

更新:如果我在这个配置上运行 apache2ctl -S 我得到这个输出:

虚拟主机配置:
通配符 NameVirtualHosts 和 _default_ 服务器:
*:80 是 NameVirtualHost
         默认服务器 www.example.com (/etc/apache2/sites-enabled/dev:3)
         端口 80 namevhost www.example.com (/etc/apache2/sites-enabled/dev:3)
         端口 80 namevhost example.com (/etc/apache2/sites-enabled/dev:22)

经过大量挖掘后,我决定禁用我运行的单声道应用程序,然后发现它开始从正确的站点提供文件。他们确实需要按顺序输入:

<VirtualHost *:80>
  ServerName example.com
</VirtualHost>

<VirtualHost *:80>
  ServerName www.example.com
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

正如向导所建议的那样。为了让我的单声道应用程序工作,我在每个虚拟主机中使用了“MonoAutoApplication enabled”。但是我不确定这是最好的选择,因为在单声道网站上 它说你不应该为 asp.net mvc 应用程序使用自动托管(这是我正在使用的)。到目前为止,我看不到缺点。

sys*_*138 5

代码应该是:

<VirtualHost _default_:80>
   ServerName example.com
</VirtualHost>

<VirtualHost *:80>
    ServerName www.example.com
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

看: http://httpd.apache.org/docs/2.2/vhosts/examples.html#default

如果没有其他匹配项,这明确定义了“example.com”vhost 作为要使用的主机。


rec*_*bot 3

更新: * 是有效的语法,但不是必需的。你可以在这里找到更多。

但这会起作用。

<VirtualHost *:80>
   ServerName example.com
</VirtualHost>

<VirtualHost *:80>
    ServerName www.example.com
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

第一个指令将匹配其他地方未明确定义的所有内容。