我想我现在讨厌 Apache,但还是继续讨论这个问题。这可能是我的配置错误,或者只是我无法看到眼前的情况,但我正在尝试在 Apache 中配置子域,无论如何,它总是将子域重定向到主域的 Web 根目录。我的配置发布如下(是的,域名信息是故意修改的):
<VirtualHost *>
DocumentRoot /var/www/root/
ServerName example.com
<Directory /var/www/root/>
allow from all
Options +Indexes
</Directory>
</VirtualHost>
<Directory /usr/share/squirrelmail>
Options Indexes FollowSymLinks
<IfModule mod_php5.c>
php_flag register_globals off
</IfModule>
<IfModule mod_dir.c>
DirectoryIndex index.php
</IfModule>
# access to configtest is limited by default to prevent information leak
<Files configtest.php>
order deny,allow
deny from all
allow from 127.0.0.1
</Files>
</Directory>
# users will prefer a simple URL like http://webmail.example.com
<VirtualHost *>
DocumentRoot /usr/share/squirrelmail/
ServerName squirrelmail.example.com
</VirtualHost>
答案1
您需要使用 启用基于名称的虚拟主机NameVirtualHost *
。另外,我不知道这是否重要,但是为什么 squirrelmail 文档根目录在其 VirtualHost 容器之外定义?
答案2
首先:您应该缩进您的配置,以便于阅读。这也有助于您发现某些类型的错误。
我确实不认为这会导致错误,但值得一试;)文档说:应指定不带尾部斜杠的 DocumentRoot。
我看不到您的虚拟主机配置中的错误,而且您说它会重定向到默认域,所以我认为错误不是出在 apache 方面。也许错误来自您指定的 index.php – 您是否在 squirrelmail 配置中设置了一些默认主机或其他内容以便它重定向?尝试用一些只打印某些内容的文件替换 index.php,然后检查是否有效。