IIS让URL重写贪婪

问题描述:

我想在IIS 7.5(在Windows Web Server 2008 R2上)制作通用的URL重写规则。IIS让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:

的folder1/PARAM

我得到以下响应:

{R:1}为空
{R:2} = folder1中
{R:3} =参数

我怀疑以下响应:

{R:1} = folder1中
{R:2}为空
{R:3} = param

即使我想文件夹1被映射到重写模式的第一部分。

我要地图重写规则:

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

缺少什么我拿到了赛是贪婪的,即匹配第一个可能的条款?

我不知道如何使可选量词(“?”)在IIS中贪婪。但我会尝试使比赛不受欢迎,通过在第一个内部包含第二个可选子句。

因此而不是前两个选项并排侧在原审:

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

我的建议是:

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

现在第二组只能匹配,如果首先匹配。

+0

This Works。我不想去这一步,因为我的实际问题有4个级别(不仅仅是问题中提供的两个问题来展示问题),但尽管如此,这似乎是一个很好的解决方案。 – Gedde 2010-11-27 04:01:10