Apache2 Apache virtualhosts和默认服务器未按预期工作(提供不正确的内容)

Apache2 Apache virtualhosts和默认服务器未按预期工作(提供不正确的内容),apache2,webserver,virtualhost,centos5,Apache2,Webserver,Virtualhost,Centos5,我已经玩了几个小时了,得出结论,问别人可能是最好的方法 我有一个非常现成的apache安装(我添加了mod_security和mod_python),所以没有触及/etc/httpd/conf/httpd.conf 我有许多域都以的形式运行,每个域都有自己的配置文件。它们都按预期工作,除了任何无法识别的主机名都将提供来自第一个virtualhost的内容(我知道这是第一个virtualhost的内容提供时的预期行为) 我想设置一个默认的内容集,如果有人通过未知的主机名访问我的服务器,我会提供这些

我已经玩了几个小时了,得出结论,问别人可能是最好的方法

我有一个非常现成的apache安装(我添加了mod_security和mod_python),所以没有触及/etc/httpd/conf/httpd.conf

我有许多域都以的形式运行,每个域都有自己的配置文件。它们都按预期工作,除了任何无法识别的主机名都将提供来自第一个virtualhost的内容(我知道这是第一个virtualhost的内容提供时的预期行为)

我想设置一个默认的内容集,如果有人通过未知的主机名访问我的服务器,我会提供这些内容。但是这样做的时候,第一个网站现在也提供了这些默认内容,我似乎找不到原因

各个站点的所有配置文件都位于/etc/httpd/conf.d/sites中(因此不会自动包含),然后通过我创建的文件(/etc/httpd/conf.d/sites.conf)包含这些文件-在尝试设置默认服务器之前,其内容如下:

Include conf.d/sites/*.conf
我将其修改为以下内容,以尝试使默认服务器正常工作:

<VirtualHost _default_:80>
        DocumentRoot /home/sites/DEFAULT
        <Directory "/home/sites/DEFAULT">
                AllowOverride None
                Order allow,deny
                Allow from all
        </Directory>
</VirtualHost>
Include conf.d/sites/*.conf

DocumentRoot/home/sites/DEFAULT
不允许超限
命令允许,拒绝
通融
包括conf.d/sites/*.conf
只是重复一下这个问题——当第二个版本的sites.conf处于活动状态时,第一个VirtualHost也会提供此内容;其余的都很好。所有站点的配置文件在语法上都是正确的,服务器名中没有输入错误

(为了便于参考,我包含了违规站点的配置文件-存储在/etc/httpd/conf.d/sites/DOMAIN.clintonmontague.co.uk.conf中)


DocumentRoot/home/sites/clintonmontague.co.uk/www
服务器名clintonmontague.co.uk
对数级应急
CustomLog/home/sites/clintonmontague.co.uk//\u logs/access\u log“合并”
不允许超限
通融
选项+索引
对不起,问题太长了


其他信息:Apache2.2、CentOS 5、MediaTemple(dv)

仅供参考-问题似乎是因为/etc/sysconfig/network将我的主机名报告为clintonmontague.co.uk(碰巧是第一个按字母顺序排列的域)。因此,默认包含该域名,因此默认内容正在被提供

我想如果有人有类似的问题,我会发布答案:)

无法在MediaTemple中更改此值(每次(dv)重新启动时,都会重置此值)

我通过在默认内容的index.php中包含这一行来修复它

<?php
if ($_SERVER['SERVER_NAME'] == 'clintonmontague.co.uk' )
{
    header ('Location: http://www.clintonmontague.co.uk/');
}
?>

如果你在回答中所说的是正确的,那么试试这个。请注意
ServerAlias
行,它应该可以代替PHP代码工作:

<VirtualHost *:80>
        DocumentRoot /home/sites/clintonmontague.co.uk/www
        ServerName clintonmontague.co.uk
        ServerAlias www.clintonmontague.co.uk 
        LogLevel emerg
        CustomLog /home/sites/clintonmontague.co.uk/_logs/access_log "combined"
        <Directory "/home/sites/clintonmontague.co.uk/www">
                AllowOverride none
                allow from all
                Options +Indexes
        </Directory>
</VirtualHost>

DocumentRoot/home/sites/clintonmontague.co.uk/www
服务器名clintonmontague.co.uk
ServerAlias www.clintonmontague.co.uk
对数级应急
CustomLog/home/sites/clintonmontague.co.uk//\u logs/access\u log“合并”
不允许超限
通融
选项+索引

如果您再次遇到此问题,@iblamefish然后查看下面我的建议答案。这是正确答案,ServerAlias专门设计用于允许单个VirtualHost通过多个域响应请求。@Flipmedia不是正确答案。这个问题问我如何指定哪个站点处理对未知域的请求-“如果有人通过未知主机名到达我的服务器,我想设置一组默认的服务内容”。
<VirtualHost *:80>
        DocumentRoot /home/sites/clintonmontague.co.uk/www
        ServerName clintonmontague.co.uk
        ServerAlias www.clintonmontague.co.uk 
        LogLevel emerg
        CustomLog /home/sites/clintonmontague.co.uk/_logs/access_log "combined"
        <Directory "/home/sites/clintonmontague.co.uk/www">
                AllowOverride none
                allow from all
                Options +Indexes
        </Directory>
</VirtualHost>