我在安装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将保持在最后的位置,将永远采取“任何其他”的要求。