以下是我当前的设置:
在我的底部httpd.conf
有以下内容:
NameVirtualHost *:80
Include /etc/httpd/conf/vhosts/*
里面/etc/httpd/conf/vhosts
有以下文件:
主站点.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
用户重定向到mainsite.com
SEO)。sub1.mainsite.com
也有自己的内容DocumentRoot
,不会干扰其他任何东西。
但是, gets和get<Anything that isn't www or sub1>.mainsite.com
是一样的。我更希望的是,当任何主机与 不匹配时,都会出现一个错误页面。DocumentRoot
mainsite.com
www.mainsite.com
VirtualHost
现在来谈谈实际问题:
我可以调整什么来获得所需的效果?另外,s 之间通用的目录规则可以VirtualHost
重构为吗httpd.conf
?如果可以,我是否只需执行以下类似操作?
<Directory "/var/www/vhosts">
allow from all
Options -Indexes
</Directory>
答案1
<VirtualHost *:80>
ServerAlias *.mainsite.com
...
...
</VirtualHost>
应该捕获任何未另行定义的东西。
答案2
我使用最后读取的 catchall vhost 定义
<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 文件也是一样。