是否可以将 foo.com 和 www.foo.com 解析为 index.html,将 admin.foo.com 解析为 index.php?index.html 和 index.php 都位于同一目录中?我尝试了以下配置,所有子域都解析为 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>
答案1
根据 Apache 文档,目錄索引可以在 VirtualHost 中指定。如果您指定了任何其他 DirectoryIndexes,您可以尝试删除它们并仅在 VirtualHost 中指定。但是,您的配置样式必须支持这一点。
或者,您可以考虑使用mod_alias 或者mod_rewrite相反。使用 mod_alias 检查重定向功能。
答案2
另一个解决方案是仅将 index.php 设置为 DirectoryIndex,并将 PHP redir 设置为 index.php
if ($_SERVER['SERVER_NAME'] != "admin.foo.com") {
Header('Location: index.html');
}
答案3
对于这么简单的事情,您不需要 mod_rewrite 的开销,而且这无论如何都不是对您的问题的回答,也就是说,为什么您列出的设置不能正常工作?
这个问题的答案是 DirectoryIndex 是累积的。因此,如果你有
DirectoryIndex index.html default.htm
在您的 Apache 配置文件中添加上述配置,然后执行以下操作:
DirectoryIndex index.php
导致有效的 DirectoryIndex 为:
DirectoryIndex index.html default.htm index.php
现在,您可以调整配置文件中内容的顺序,但更有趣的选择是添加:
<Files /var/www/foo/index.html>
Deny from all
</Files>
在您的 PHP 驱动的 VHost 内部,由于 Apache 无法按照策略读取 index.html,因此将导致其故障转移到 DI 列表中的下一个条目。
再想想,也许只需重新排序你的配置文件是一个更好的主意。;)