Apache虚拟主机和默认服务器无法按预期工作(提供不正确的内容)

时间:2010-03-06 14:45:38

标签: apache2 webserver virtualhost centos5

我已经玩了几个小时,并得出结论,问某人可能是最好的前进方式!

我有一个相当开箱即用的apache安装(我添加了mod_security和mod_python)所以没有触及/etc/httpd/conf/httpd.conf

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

我想设置一个默认的内容集,如果有人通过未知的主机名到达我的服务器 - 但是这样做,第一个网站现在也提供这个我似乎无法找到的默认内容原因。

各个站点的所有配置文件都位于/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

重新迭代问题 - 当第二个版本的sites.conf处于活动状态时,第一个VirtualHost也会提供此内容;其余的都很好。所有站点的配置文件在语法上都是正确的,并且在ServerNames中没有拼写错误。

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

<VirtualHost *:80>
        DocumentRoot /home/sites/clintonmontague.co.uk/www
        ServerName 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>

对于这个过长的问题感到抱歉!

其他信息:Apache 2.2,CentOS 5,MediaTemple(dv)

2 个答案:

答案 0 :(得分:4)

如果你在答案中所说的是正确的,那就试试吧。请注意应该起作用的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>

答案 1 :(得分:2)

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

以为如果有人遇到类似的问题,我会发布答案:)

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

我通过将此行包含在默认内容的index.php

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