Apache子域configuration不起作用

我有一个由其他人configuration的Debian 6服务器。 我被要求在该服务器上添加一个子域名

我正确地configuration了DNS(用nslookup检查),在/var/www/创build了目录,然后添加了新的虚拟主机/etc/apache2/sites-available (实际上我复制了一个现有子域的文件, ):

 <VirtualHost *:80> DocumentRoot "/var/www/mysub.example.com" ServerName mysub.example.com ServerAlias www.mysub.example.com ErrorLog ...[path to file] CustomLog [path to file] RewriteEngine On #RewriteCond %{HTTP_HOST} ^mysub.example.com$ [NC] #RewriteRule ^(.*)$ http://www.mysub.example.com$1 [R=301,L] <Directory /var/www/mysub.example.com> AllowOverride All Require all granted </Directory> </VirtualHost> 

然后,我使用a2ensite添加了主机,并重新启动了Apache,但域mysub.example.com正在redirect到beta.example.com这是我们的testing版生产站点。 奇怪的是, /etc/apache2/sites-available没有configurationbeta.example.com

我还应该做些什么来启用这个子域名? 我很确定example.com主机的configuration没有阻塞任何东西,因为我们也有一个configuration为这样的blog.example.com虚拟主机,它工作的很好。

编辑

一些debugging输出:

 root@xxx:~# apachectl -S VirtualHost configuration: wildcard NameVirtualHosts and _default_ servers: *:443 beta.example.com (/etc/apache2/sites-enabled/01-example.com:18) *:80 is a NameVirtualHost default server beta.example.com (/etc/apache2/sites-enabled/01-example.com:1) port 80 namevhost beta.example.com (/etc/apache2/sites-enabled/01-example.com:1) port 80 namevhost blog.example.com (/etc/apache2/sites-enabled/02-blog.example.com:1) port 80 namevhost [here comes other unrelated domain name] port 80 namevhost forum.example.com (/etc/apache2/sites-enabled/04-forum.example.com:1) port 80 namevhost example.com (/etc/apache2/sites-enabled/05-sth.example.com:1) port 80 namevhost mysub.example.com (/etc/apache2/sites-enabled/06-mysub.example.com:1) Syntax OK root@xxx:~# grep -r 'mysub\.example\.com' /etc/apache2 /etc/apache2/apache2.conf:Alias /mysub /var/www/mysub.example.com /etc/apache2/sites-available/06-mysub.example.com: DocumentRoot "/var/www/mysub.example.com" /etc/apache2/sites-available/06-mysub.example.com: ServerName mysub.example.com /etc/apache2/sites-available/06-mysub.example.com: ServerAlias www.mysub.example.com /etc/apache2/sites-available/06-mysub.example.com: ErrorLog "/var/log/apache2/mysub.example.com-error_log" /etc/apache2/sites-available/06-mysub.example.com: CustomLog "/var/log/apache2/mysub.example.com-access_log" common /etc/apache2/sites-available/06-mysub.example.com: #RewriteCond %{HTTP_HOST} ^mysub.example.com$ [NC] /etc/apache2/sites-available/06-mysub.example.com: #RewriteRule ^(.*)$ http://www.mysub.example.com$1 [R=301,L] /etc/apache2/sites-available/06-mysub.example.com: <Directory /var/www/mysub.example.com> root@xxx:~# grep -r 'beta\.example\.com' /etc/apache2 /etc/apache2/sites-available/01-example.com: ServerName beta.example.com /etc/apache2/sites-available/01-example.com: ServerAlias www.beta.example.com /etc/apache2/sites-available/01-example.com: ErrorLog "/var/log/apache2/beta.example.com-error_log" /etc/apache2/sites-available/01-example.com: CustomLog "/var/log/apache2/beta.example.com-access_log" common /etc/apache2/sites-available/01-example.com: ServerName beta.example.com:443 /etc/apache2/sites-available/01-example.com: ServerAlias www.beta.example.com:443 /etc/apache2/sites-available/01-example.com: ErrorLog "/var/log/apache2/beta.example.com-error_log" /etc/apache2/sites-available/01-example.com: CustomLog "/var/log/apache2/beta.example.com-access_log" common 

编辑2我做了一个快速testing。 我禁用了第一个虚拟主机( beta.example.com ):

 a2dissite 01-example.com 

然后尝试访问mysub.example.com ,我现在被redirect到blog.example.com – 这是第二个启用网站的顺序。 所以它看起来像mysub.example.com没有被发现,它落入它find的*.example.com子域的第一个bin。

编辑2

另一个testing:我改变了我的configuration文件的顺序,以便我的新子域是第一个(默认)。 马上:

 root@xxx:~# apachectl -S VirtualHost configuration: wildcard NameVirtualHosts and _default_ servers: *:443 beta.example.com (/etc/apache2/sites-enabled/01-example.com:14) *:80 is a NameVirtualHost default server mysub.example.com (/etc/apache2/sites-enabled/00-mysub.example.com:1) port 80 namevhost mysub.example.com (/etc/apache2/sites-enabled/00-mysub.example.com:1) port 80 namevhost beta.example.com (/etc/apache2/sites-enabled/01-example.com:1) port 80 namevhost blog.example.com (/etc/apache2/sites-enabled/02-blog.example.com:1) Syntax OK 

而且,如果我尝试inputmysub.example.com我将被redirect到beta.example.comblog.example.com仍然工作得很好。

是否有机会在其他地方定义域configuration(除/etc/apache2/sites-available目录之外)?

编辑3

主机的其他configuration:beta.example.com和blog.example.com

beta.example.com(文件:/etc/apache2/hosts-available/01-example.com)

 <VirtualHost *:80> DocumentRoot "/var/www/example.com" ServerName beta.example.com ServerAlias www.beta.example.com ErrorLog "/var/log/apache2/beta.example.com-error_log" CustomLog "/var/log/apache2/beta.example.com-access_log" common <Directory /var/www/example.com> AllowOverride All </Directory> </VirtualHost> <VirtualHost *:443> DocumentRoot "/var/www/example.com" ServerName beta.example.com:443 ServerAlias www.beta.example.com:443 ErrorLog "/var/log/apache2/beta.example.com-error_log" CustomLog "/var/log/apache2/beta.example.com-access_log" common RewriteEngine On #RewriteCond %{HTTP_HOST} ^example.com$ [NC] #RewriteRule ^(.*)$ http://www.example.com$1 [R=301,L] SSLEngine on SSLCertificateFile /etc/apache2/ssl/apache.crt SSLCertificateKeyFile /etc/apache2/ssl/apache.key <Directory /var/www/example.com> AllowOverride All </Directory> </VirtualHost> 

blog.example.com(文件:/etc/apache2/hosts-available/02-blog.example.com)

 <VirtualHost *:80> DocumentRoot "/var/www/blog.example.com" ServerName blog.example.com ServerAlias www.blog.example.com ErrorLog ...[path to file] CustomLog [path to file] RewriteEngine On #RewriteCond %{HTTP_HOST} ^blog.example.com$ [NC] #RewriteRule ^(.*)$ http://www.blog.example.com$1 [R=301,L] <Directory /var/www/blog.example.com> AllowOverride All Require all granted </Directory> </VirtualHost> 

我build议你debugging所有的文件,因为c4f4t0r说试试“apache2ctl -S”,然后尝试在.htaccess文件里面find重写规则,例如:

 find /var/www/mysub.example.com -name ".htaccess" -exec grep -l -i rewrite {} \; 

在你的主configuration文件中你有一些“危险”的东西:

 <Directory /var/www/mysub.example.com> AllowOverride All # <---- THIS Require all granted </Directory> 

您应该检查文件/etc/apache2/ports.conf然后查看Listen 80附近的NameVirtualHost *:80

如果您没有这一行,则不能使用基于ServerName的虚拟主机,因此在浏览器中总是首次启用虚拟主机是正常的。

好的,问题(和解决scheme)出来很简单。

问题是新创build的子域的文件夹是空的 – 它没有index.php / html文件。 所以服务器,而不是显示它(作为目录),redirect到默认域 – 这是beta.example.com

所以虚拟主机的configuration是正确的,并添加一些文件的文件夹后,子域的规定工作。