【问题标题】:ReWrite Rule in IIS using RegEx使用 RegEx 在 IIS 中重写规则
【发布时间】:2013-08-17 01:00:48
【问题描述】:

在过去的几个小时里,我尝试在 IIS 中创建一个符合我要求的重写规则,但我就是不明白。所以也许有人可以帮助我:-)

到目前为止,我所拥有的如下:

重写网址

index.php?page={R:1}&param={R:2}

正则表达式模式

^(.*)/([0-9]+)

这就是我想在最后写我的网址的方式:

在这个例子中,我应该在“?page”中有“news/detail”,在“?param”中有“1”。

到目前为止,我创建的规则似乎效果很好,只要我在末尾有一个数字(参数)。

我唯一的问题是我想让数字(参数)可选。

非常感谢您的支持。

【问题讨论】:

  • 最终规则是什么?规则中可以指定多少个路径和/或参数?
  • @cheesemacfly 最终规则应该是,路径不应该有任何限制,但如果可以设置一个参数就足够了。路径中永远不会有数字。

标签: regex iis url-rewriting


【解决方案1】:

我想不出比这更宽容的东西了:

^([a-z-/]+)([0-9])?

根据您的评论Paths never have a number in it,我更进一步,只允许从az 的字符(如果需要,请使用忽略大小写选项)。
此规则将匹配以下任何 url:

  • news/detail/1/ => {R:1} = news/detail/{R:2} = 1
  • news/detail/1 => {R:1} = news/detail/{R:2} = 1
  • news/detail/ => {R:1} = news/detail/{R:2} 为空
  • news/detail => {R:1} = news/detail{R:2} 为空

您可能必须处理代码中尾随的/

限制来自据我所知,重写规则中的正则表达式不支持负前瞻/后瞻模式。

【讨论】:

  • 非常感谢,为我完成了这项工作!
【解决方案2】:

要允许最终匹配捕获是可选的,请放置一个 ?通过它。还可以通过用结束字符 $ 锚定它来指定它将位于。

^(.*)/?(\d+)?$

我还设置了最后的 / 可选的,因为如果没有数字,你不希望匹配失败,如果它最后没有 / (应该是可选的)。

【讨论】:

  • 感谢您的回答,但结果是所有内容都在 {R:1} (?page) 中 - 知道为什么吗?
  • @Crasher .* 是贪婪的(用正则表达式的说法)说给我一切。 .*?说给我最多,但一看到变化就停下来。无论如何,你没有任何东西会阻止。*得到一切。
猜你喜欢
  • 2020-01-18
  • 2018-02-12
  • 1970-01-01
  • 2014-05-01
  • 2014-10-27
  • 1970-01-01
相关资源
最近更新 更多