条件目录索引

Posted

技术标签:

【中文标题】条件目录索引【英文标题】:Conditional DirectoryIndex 【发布时间】:2011-12-03 14:04:01 【问题描述】:

我在同一个目录中安装了两个 CMS。其中一个 CMS 允许将 index.php 文件重命名为 index2.php,而另一个则不允许。理想情况下,我想在 .htaccess 文件中设置一个条件规则:

使用 index.php 作为默认 DirectoryIndex 如果出现 404 错误,则将 DirectoryIndex 设置为 index2.php

有谁知道这是否/如何可能?

【问题讨论】:

好问题,我不确定.htaccess 是否可行。您可以向第一个 CMS 发出子请求,如果返回 404 状态标头,则适用于 index2.php 的第二条规则。 这是最适合您的应用程序的设置吗?让每个 CMS 都存在于自己的子目录中怎么样……或者更好的是,自己的虚拟主机? 【参考方案1】:

(404 = 未找到文件),因此您实际上是在寻找一种允许浏览可能的索引文件列表的方法) 将以下行添加到您的 .htaccess 文件中:

DirectoryIndex index.php index2.php

index.php 存在时,它会被使用。否则,使用index2.php。 当index.phpindex2.php 存在时,使用index.php,因为它首先出现。

另请参阅:Apache Docs > DirectoryIndex directive。

【讨论】:

我不认为 OP 要求这样做。我认为 CMS 1 应该首先启动,如果它返回 404(找不到文件),CMS 2 应该启动。但是两个 CMS 都使用 url-aliasing。 @hakre 问题中给出了条件。 "Use index.php, if 404 then use index2.php",等于:Use index.php if exist, else index2.php,转换为DirectoryIndex index.php index2.php 嗯,index.php可以返回一个404返回状态头("使用index.php"),如果是的话("if 404 然后使用 index2.php")。 DirectoryIndex 不检查子请求 AFAIK 的响应代码,它只是在文件存在时执行索引脚本,而不管该脚本将返回哪种响应状态。 感谢您的回复,Rob - DirectoryIndex 方法几乎可以工作,但是正如 hakre 所说,两个 CMS(Magento 和 WordPress)都有 url 别名,这会导致 Magento 页面出现并且 WordPress 页面导致Magento 404 页面。

以上是关于条件目录索引的主要内容,如果未能解决你的问题,请参考以下文章

Oracle 条件索引 case when 报错解决方案

数据库-ElasticSearch入门(索引文档查询)

数据库-ElasticSearch入门(索引文档查询)

Oracle 条件索引 case when 报错解决方案

第 2 章 查询条件优化之等值查找

Solr索引库查询界面详解