0

我想在 IIS 7.5(在 Windows Web Server 2008 R2 上)中创建一个通用的 URL 重写规则。

我想匹配以下网址:

www.mysite.com/param
www.mysite.com/folder1/
www.mysite.com/folder1/param
www.mysite.com/folder1/folder2/
www.mysite.com/folder1/folder2/param

当我想匹配一个文件夹时,请注意尾部的斜杠 (/),否则它是一个参数。

我已经设置了以下重写规则:

^(?:([^/]+)/)?(?:([^/]+)/)?([^/]+)?$

它具有三个匹配子句:{R:1}、{R:2} 和 {R:3}。但是,当我输入以下测试 URL 时:

文件夹 1/参数

我得到以下回复:

{R:1} 为空
{R:2} = 文件夹
1 {R:3} = 参数

我怀疑以下反应:

{R:1} = 文件夹 1
{R:2} 为空
{R:3} = 参数

即我希望将folder1映射到重写模式的第一部分。

我想将重写规则映射到:

/controller.php?folder1={R:1}&folder2={R:2}&param={R:3}

我缺少什么让匹配变得贪婪,即匹配第一个可能的子句?

4

1 回答 1

0

我不知道如何在 IIS 中使可选量词(“?”)变得贪婪。但是我会尝试通过将第二个可选子句包含在第一个子句中来使匹配明确。

因此,不要像原始试用版那样将前两个选项并排放置:

^(?:([^/]+)/)?(?:([^/]+)/)?([^/]+)?$

我建议这样做:

^(?:([^/]+)/(?:([^/]+)/)?)?([^/]+)?$

现在第二组只有在第一组匹配时才能匹配。

于 2010-11-26T21:34:29.657 回答