是否可以让 foo.com 和 www.foo.com 解析为 index.html 而让 admin.foo.com 解析为 index.php?

是否可以让 foo.com 和 www.foo.com 解析为 index.html 而让 admin.foo.com 解析为 index.php?

是否可以将 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 列表中的下一个条目。

再想想,也许只需重新排序你的配置文件一个更好的主意。;)

相关内容