我有类似这样的问题: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文件规则使其工作感兴趣。
答案 0 :(得分:1)
根据上面的评论,您的原始问题是通过删除文章目录解决的,但您仍然希望能够在这种情况下处理目录。
您可能希望分为两组规则。有一个早期的规则使用-d
中的RewriteCond
标记来捕获目录,以便它可以根据需要对它们进行不同的处理。或者,通过否定标志(!-d
)忽略第一个规则中的目录,然后在后面的规则中捕获它们。