1

我有一个非常类似的问题:Apache mod_rewrite - 喜欢文件而不是具有漂亮 URL 的目录

但是它不一样,上面链接中提到的解决方案对我不起作用。


我的目录结构如下所示:

/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

但是如果我输入这个 URL:www.domain.com/articles它将使链接像这样:www.domain.com/articles/ ?page[]=articles (换句话说index.php不会包含/pages/文章.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]

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

编辑:我发现了这个但是它不能解决我的问题:(


有人能告诉我为什么会这样以及如何解决吗?

或者,我怎样才能优先考虑文件而不是目录?

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

4

1 回答 1

1

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

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

于 2013-01-31T01:06:39.327 回答