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

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

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

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

现在select哪个主机服务似乎是随机的。 如果我重新启动Apache有时我会得到一个主机和其他时间。

我究竟做错了什么?

谢谢!

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

  VirtualHostconfiguration:
通配符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)

经过大量的挖掘,我决定禁用我运行的低级单声道应用程序,并注意它开始从正确的站点提供文件。 他们确实需要按顺序input:

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

如向导build议的那样。 为了让我的单声道应用程序正常工作,我在每个虚拟主机中使用了“MonoAutoApplication enabled”。 不过,我不知道这是最好的select,因为它说你不应该使用自动托pipe的asp.net mvc应用程序(这是我使用的)。 到目前为止,我看不出有什么不好的地方。

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

这将工作。

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

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

代码应该可能是:

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

请参阅: http : //httpd.apache.org/docs/2.2/vhosts/examples.html#default

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

您确定www.example.com虚拟主机出现在configuration文件中的其他虚拟主机之前吗? Apache应该按顺序通过虚拟主机,然后select第一个与ServerNameServerAlias匹配的Host HTTP头中发送的值。 看起来很奇怪的是,它会随机挑选一个虚拟主机,有时会select另一个虚拟主机。

这可能有助于编辑您的问题,包括输出

 apache2ctl -S 

其中显示了Apache所看到的定义的虚拟主机。

您需要将DocumentRoot添加到configuration中。 它应该是这样的:

 # Ensure that Apache listens on port 80 Listen 80 # Listen for virtual host requests on all IP addresses NameVirtualHost *:80 <VirtualHost *:80> DocumentRoot /www/example1 ServerName www.example1.com # Other directives here </VirtualHost> <VirtualHost *:80> DocumentRoot /www/example2 ServerName www.example2.org # Other directives here </VirtualHost> 

编辑:似乎我认为我比我更了解Apache。 感谢您的意见。