我已经和这个奇怪的问题斗争了好几个小时。我认为我把所有文件都整理好了,一切都应该正常,但事实并非如此。我有
- domain.com(别名:www.domain.com)
- 子域名.域名.com
这应该是两个不同的网站。
这些是我的配置文件(Ubuntu 10.04):
Apache2.conf:
Include /etc/apache2/sites-enabled/
Include /opt/subdomain.conf
端口.conf:
NameVirtualHost 123.123.123.123:80
Listen 80
在 /etc/apache2/sites-enabled/000-默认:
<VirtualHost 123.123.123.123:80>
DocumentRoot /home/landing/www
<Directory /home/landing/www>
Options None
AllowOverride None
</Directory>
</VirtualHost>
--> 不指定 ServerName。捕获对 IP 的请求,并确实打开 /home/landing/www
在 /etc/apache2/sites-enabled /domain1 上配置:
<VirtualHost 123.123.123.123:80>
ServerName domain1.com
DocumentRoot /home/domain1/www
ServerAlias www.domain1.com
<Directory /home/domain1/www>
Options None +FollowSymLinks
Order Allow,Deny
Allow from All
</Directory>
</VirtualHost>
--> 这是主站点。打开正常,也可以使用 www.domain.com
/opt/subdomain.conf:
<VirtualHost 123.123.123.123:80>
ServerName subdomain.domain1.com
DocumentRoot "/opt/subdomain/www"
</VirtualHost>
--> 问题就在这里。它无法打开。而是打开 /home/landing/www...?当我打开任何子域时都会发生这种情况,因此整个配置似乎被忽略了。有人知道为什么吗?或者如何检查?
答案1
据我所知,这是由于您在第一个 VirtualHost 中没有使用 ServerName。
您不能混淆 apache 中的基于名称和不基于名称的虚拟主机,这会造成很大的混乱,apache 将按照配置顺序尽“最大努力”匹配域。
建立默认虚拟主机的推荐方法仍然是在其中包含 ServerName(应该如此),但将 VirtualHost 行从
<VirtualHost 123.123.123.123:80>
DocumentRoot /home/landing/www
对此
<VirtualHost _default_:80>
DocumentRoot /home/landing/www
ServerName blablabla