apache使用VirtualHost后不再读取DocumentRoot

分类:技术 2.13k浏览

linux环境下 apache 下在conf.d目录添加httpd-vhosts.conf添加了一条虚拟主机规则文件后,发现 DocumentRoot 也变成了这个虚拟主机,即apache把localhost也当虚拟主机规则处理了。

DocumentRoot 下有其它文件(比如访问ip时显示默认页),但会被apache当虚拟主机规则处理,即自动显示到了虚拟主机(指定域名和目录)的页面。

虽然apache内并没有指定 localhost (即 *)到对应虚拟主机配置文件目录,但依然会被处理,解决方案如下,直接在httpd-vhosts.conf里头部添加此规则。

<VirtualHost *:80>

     DocumentRoot “/var/www/html”

    ServerName localhost

    ServerAlias localhost

</VirtualHost>

即先规避。

原因:localhost 其实是 localhost:80 即便你没有 localhost 的规则,但只要你有端口号是80的规则也会匹配成功,会以第一条以80作为端口的规则进行处理,这也就是当你开启80端口的虚拟主机后会发现 localhost 成了你第一条80端口的虚拟主机规则 。

参考文献:https://my.oschina.net/sallency/blog/533562