重写规则之间的差异

时间:2017-12-29 12:33:26

标签: apache .htaccess mod-rewrite

你能解释一下这些重写规则之间有什么区别吗?

rewriterule ^news/category/(.*)/([0-9]+)/?$    index.php?p=news&category=$1&page=$2 [L,QSA]
rewriterule ^news/category/(.+)/([0-9]+)/*$    index.php?p=news&category=$1&page=$2 [L,QSA]

(.*)(.+)之间的差异以及/?$/*$之间的差异?

rewriterule ^news/category/(.*)/?$    index.php?p=news&category=$1 [L,QSA]
rewriterule ^news/category/(.+?)/*$    index.php?p=news&category=$1 [L,QSA]

(.*)(.+?)之间的差异?

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

你有格特的技术答案。 我的非技术性的#34;是:

  • 第1行:如果网址包含字符串或没有,后跟斜杠和数字或没有,以/ 结尾或不,然后应用rewriterule
  • 第2行:如果网址有字符串,后跟斜杠和数字或没有,以结尾,则应用重写

以下是您可能遇到的网址问题:

  • #1,这将被视为"有效":news/category//548/
  • 使用#2,这将被视为"有效":news/category/whatever/548/this-is-a-problematic564string

您可以将相同的原则应用于您的第二个比较/问题。

答案 1 :(得分:0)

(.*)匹配和无限次,多次尽可能回馈(贪婪)
(.+)匹配一个和无限次,多次尽可能回馈(贪婪)
(.+?)匹配一个和无限次,几次尽可能扩展(懒惰)

转到regex101.com以调试正则表达式

/?$/*$我不确定。它始终匹配。