这是我目前的设置:
在httpd.conf的底部,我有以下几点:
NameVirtualHost *:80 Include /etc/httpd/conf/vhosts/*
在/etc/httpd/conf/vhosts我有以下文件:
mainsite.com.conf:
<VirtualHost *:80> DocumentRoot "/var/www/vhosts/mainsite.com" ServerName mainsite.com ServerAlias www.mainsite.com <Directory "/var/www/vhosts/mainsite.com"> allow from all Options -Indexes </Directory> </VirtualHost>
sub1.mainsite.com.conf:
<VirtualHost *:80> DocumentRoot /var/www/vhosts/sub1.mainsite.com ServerName sub1.mainsite.com <Directory "/var/www/vhosts/sub1.mainsite.com"> allow from all Options -Indexes </Directory> </VirtualHost>
到现在为止还挺好! mainsite.com和www.mainsite.com共享相同的DocumentRoot (稍后我可以将所有的www.mainsite.com用户redirect到mainsite.comsearch引擎优化)。 sub1.mainsite.com也有自己的DocumentRoot ,不会干扰其他任何事情。
但是, <Anything that isn't www or sub1>.mainsite.com获得与<Anything that isn't www or sub1>.mainsite.com相同的DocumentRoot 。 我更希望的是一个错误页面出现任何主机,不匹配VirtualHost 。
而现在的实际问题是:我可以调整什么以获得预期的效果? 另外, VirtualHost之间通用的目录规则是否可以重构为httpd.conf ? 如果是这样,我会做一些像下面这样的事情吗?
<Directory "/var/www/vhosts"> allow from all Options -Indexes </Directory>
<VirtualHost *:80> ServerAlias *.mainsite.com ... ... </VirtualHost>
应该抓住没有其他定义的东西。
我使用最后被读取的catchall虚拟主机定义
<VirtualHost *:80> ServerName default ServerAlias * DocumentRoot /var/www/default ErrorDocument 404 /404.html <Directory "/var/www/default"> Options All AllowOverride None allow from All </Directory> </VirtualHost>
默认的index.html文件告诉用户在提供的地址处有注意。 404.html文件一样。