是否有可能有foo.com和www.foo.com解决index.html和admin.foo.comparsing为index.php?

是否有可能有foo.com和www.foo.com解决index.html和admin.foo.comparsing为index.php? index.html和index.php都驻留在同一个目录中? 我试着下面的configuration和所有的子域parsing为index.html。

<VirtualHost *:80> ServerName foo.com ServerAlias www.foo.com DocumentRoot "/var/www/foo" DirectoryIndex index.html </VirtualHost> <VirtualHost *:80> ServerName admin.foo.com DocumentRoot "/var/www/foo" DirectoryIndex index.php </VirtualHost> 

根据Apache文档, DirectoryIndex可以在VirtualHost中指定。 如果指定了其他DirectoryIndexes,则可以尝试删除它们,并只在VirtualHost中指定。 然而,你的configuration风格将不得不支持这一点。

作为替代scheme,您可以考虑使用mod_alias或mod_rewrite 。 用mod_alias检查redirect函数。

另一种解决scheme是只将index.php设置为DirectoryIndex,并将PHP redir设置为index.php

 if ($_SERVER['SERVER_NAME'] != "admin.foo.com") { Header('Location: index.html'); } 

你不需要mod_rewrite这么简单的开销,这不是你的问题的答案,无论如何,这就是为什么你的设置没有像列出的那样正常工作?

这个问题的答案是DirectoryIndex是累积的。 所以,如果你有

 DirectoryIndex index.html default.htm 

在你的Apacheconfiguration文件的这些configuration之上,然后有:

 DirectoryIndex index.php 

导致有效的DirectoryIndex:

 DirectoryIndex index.html default.htm index.php 

现在,你可以在你的configuration文件中按顺序sorting,但是更有趣的select是添加:

 <Files /var/www/foo/index.html> Deny from all </Files> 

在你的PHP驱动的VHost里面,由于Apache不能通过策略读取index.html,所以会导致它故障切换到DI列表中的下一个条目。

然后再来想一想,也许只是重新订购你的configuration文件一个更好的主意。 ;)