是否有可能有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文件是一个更好的主意。 ;)