【问题标题】:Apache - mod_rewrite how to prefer files instead of directories (if both have same name)?Apache - mod_rewrite 如何更喜欢文件而不是目录(如果两者具有相同的名称)?
【发布时间】: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


【解决方案1】:

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

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

【讨论】:

猜你喜欢
  • 2011-02-09
  • 1970-01-01
  • 2017-01-29
  • 1970-01-01
  • 2017-06-04
  • 1970-01-01
  • 2017-07-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多