只有一个Apache虚拟主机configuration生效

我在安装Ubuntu 14.04时使用了Apache 2.4,并且正在configurationApache“虚拟主机”,以便为不同的主机名提供不同的内容。

我正在尝试configurationApache,以便在尝试使用主机名(www.)example1.com访问服务器时,将提供/var/www/example1内容; 但是,如果尝试使用IP地址或除(www.)example1.com之外的任何其他主机名(例如,通过IP直接访问IP地址或通过指向此IP的任何其他主机名)访问服务器,内容从/var/www/html代替。

我在/etc/apache2/sites-available下有以下configuration文件:

/etc/apache2/sites-available/example1.conf

 <VirtualHost example1.com:80> DocumentRoot /var/www/example1 ServerAlias www.example1.com ErrorLog ${APACHE_LOG_DIR}/ex1_error.log CustomLog ${APACHE_LOG_DIR}/ex1_access.log combined </VirtualHost> 

/etc/apache2/sites-available/000-default.conf

 <VirtualHost *:80> DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost> 

但是,当我尝试通过直接访问或通过指向此IP的其他主机名访问网站时,我从/var/www/example1获取内容,而不是从/var/www/html

这里可能是什么问题,我该如何解决?

在2.4上使用_default_

 <VirtualHost _default_:*> DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost> 

您可以使用alias *来捕获任何其他请求,但它必须是最后一个虚拟主机。

这就是你如何在你的情况下做到这一点:

重命名并编辑/etc/apache2/sites-available/000-example1.conf:

 <VirtualHost *:80> DocumentRoot /var/www/example1 ServerName www.example1.com ErrorLog ${APACHE_LOG_DIR}/ex1_error.log CustomLog ${APACHE_LOG_DIR}/ex1_access.log combined </VirtualHost> 

重命名并编辑/etc/apache2/sites-available/001-default.conf:

 # /!\ THIS HAS TO BE ON THE LAST POSITION /!\ <VirtualHost *:80 *:443> ServerName localhost ServerAlias * DocumentRoot /var/www/html/ ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost> 

你甚至可以将001-default.conf重命名为100-default.conf ,就像下一次你将有一个新的虚拟主机如002-newhost1.conf, 003-newhost2.conf, etc default将保持在最后的位置,将永远采取“任何其他”的要求。