【发布时间】:2013-01-14 20:22:31
【问题描述】:
我也有类似的问题: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(换句话说,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]
我为 page 使用数组,因为我可以有子页面(并且子页面可以正常工作!)。
编辑:我找到了this,但它并没有解决我的问题:(
谁能告诉我为什么会这样以及如何解决它?
或者,我怎样才能优先考虑文件而不是目录?
编辑 2:我通过删除“/articles/”目录解决了这个问题,但是我仍然对如何通过 htaccess 文件规则使其工作感兴趣。
【问题讨论】:
-
当您说
" it will make link something like this: www.domain.com/articles/?page[]=articles"时,您的意思是URL 实际显示在浏览器中,这意味着正在执行重定向?还是您只是根据行为来解释正在发生的事情?您显示的规则不会重定向,因此如果您收到重定向,它必须来自其他地方。另一件需要注意的事情:因为你有一个实际的文章目录,所以 mod_dir 可能会在 URL 的末尾添加一个斜杠,在这种情况下,你的第一个规则将匹配而不是你的第二个。 -
是的,它会重定向。我没有其他规则。但是我通过删除该文件夹解决了它。而且我稍微修改了规则(削减了你的名字)。但是我仍然很好奇如何优先考虑文件而不是文件夹(我尝试放置 Options -MultiViews,但没有成功)
-
对不起,我现在意识到我有不同的目录结构,帖子已更新。
-
好吧,你可能想分成两组规则。有一个较早的规则,它在 RewriteCond 中使用
-d标志来捕获目录,以便它可以根据需要对它们进行不同的处理,或者通过否定标志来忽略第一条规则中的目录,然后在后面的规则中捕获它们。跨度> -
谢谢 :) 请将其发布为答案,我想将其设置为已接受。
标签: apache .htaccess mod-rewrite