Apache - mod_rewrite如何更喜欢文件而不是目录(如果两者都有相同名称)?

时间:2013-01-30 21:09:10

标签: apache .htaccess mod-rewrite

我有类似这样的问题:Apache mod_rewrite - prefer files over directories with pretty URLs

然而它并不相同,上面链接中提到的解决方案对我不起作用。


我的目录结构如下所示:

/pages/articles/january.php
/pages/articles.php
/pages/home.php
/articles/
/index.php

现在,我在index.php页面中包含(取决于url)。

例如,当用户类型为 www.domain.com (或 www.domain.com/home )时, index.php 将包括 /pages/home.php

但是,如果我输入此网址: www.domain.com/articles ,它会建立如下链接: www.domain.com/articles/?page [] = articles < / strong>(换句话说, index.php 不包括 /pages/articles.php 文件)

另一方面,这非常有效: www.domain.com/articles/january

这是我的htaccess文件:

RewriteEngine On
RewriteBase /
RewriteRule ^([a-zA-Z0-9+]*)/([a-zA-Z0-9+]*)$ %{DOCUMENT_ROOT}/index.php?page[]=$1&page[]=$2 [QSA,L]
RewriteRule ^([a-zA-Z0-9+]*)$ %{DOCUMENT_ROOT}/index.php?page[]=$1 [QSA,L]

我使用页面的数组,因为我可以有子页面(子页面工作正常!)。

编辑:我发现this但是它没有解决我的问题:(


有人可以告诉我为什么会这样做以及如何解决它?

或者,我如何优先考虑文件而不是目录?

编辑2:我通过删除“/ articles /”目录解决了这个问题,但是我仍然对如何通过htaccess文件规则使其工作感兴趣。

1 个答案:

答案 0 :(得分:1)

根据上面的评论,您的原始问题是通过删除文章目录解决的,但您仍然希望能够在这种情况下处理目录。

您可能希望分为两组规则。有一个早期的规则使用-d中的RewriteCond标记来捕获目录,以便它可以根据需要对它们进行不同的处理。或者,通过否定标志(!-d)忽略第一个规则中的目录,然后在后面的规则中捕获它们。