2010-11-26 46 views
0

我想在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} 

缺少什麼我拿到了賽是貪婪的,即匹配第一個可能的條款?

回答

0

我不知道如何使可選量詞(「?」)在IIS中貪婪。但我會嘗試使比賽不受歡迎,通過在第一個內部包含第二個可選子句。

因此而不是前兩個選項並排側在原審:

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

我的建議是:

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

現在第二組只能匹配,如果首先匹配。

+0

This Works。我不想去這一步,因爲我的實際問題有4個級別(不僅僅是問題中提供的兩個問題來展示問題),但儘管如此,這似乎是一個很好的解決方案。 – Gedde 2010-11-27 04:01:10