2012-07-02 68 views
2

重寫我有一個網址,可以像網址與IIS 6和MVC 3

domain.com/f1/v1/f2/v2/f3/v3/f4/v4/f5/v5/f6/v6 

用較少數的變化,如

domain.com/f1/v1/f2/v2/f3/v3/f4/v4/f5/v5 
domain.com/f1/v1/f2/v2/f3/v3/f4/v4 
domain.com/f1/v1/f2/v2/f3/v3 
domain.com/f1/v1/f2/v2 
domain.com/f1/v1 

如何建立一個重寫規則,將構建以下

domain.com/models?f1=v1&f2=v2...f6=v6 

本網站是使用Helicon Isapi_Rewrite進行URL重寫的IIS 6 MVC 3應用程序。

+0

我不知道如何在Helicon中完成它,但IIRF包含了將查詢字符串參數轉換爲url路徑段的示例,反之亦然。您可以將這些示例應用到Helicon,或者僅使用IIRF。 http://cheeso.members.winisp.net/Iirf21Help/html/1ccbf1ec-0984-49d9-9ab0-63eab3ff9c63.htm – Cheeso

+0

你爲什麼不使用mvc內置的URL路由引擎? –

回答

0

,最好的辦法是建立一套規則每個規則將處理1對,2對,3雙paraters的...

RewriteEngine on 
RewriteBase/

# rule for one pair of parameters 
RewriteCond %{HTTP:Host} ^domain\.com$ [NC] 
RewriteRule ^([^/]+)/([^/]+)$ /models?$1=$2 [NC,L] 

# rule for two pairs of parameters 
RewriteCond %{HTTP:Host} ^domain\.com$ [NC] 
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/([^/]+)$ /models?$1=$2&$3=$4 [NC,L] 
+0

然而,這種方法的作用僅限於$ 1- $ 9。我想出了一個使用地圖文件的解決方案。見答案。 – jason

+0

我爲您提供了1美元至9美元問題的解決方案,請參閱 – Andrew

0

我想出了使用地圖這一解決方案。我遇到的主要問題是超過佔位符1美元至9美元的限制。

RewriteMap filtermap txt:content/maps/filtermap.txt [NC] 

RewriteCond ${filtermap:$6|NOT_FOUND} !NOT_FOUND [NC] 
RewriteRule ^models/([^/]*/[^/]*)/([^/]*/[^/]*)/([^/]*/[^/]*)/([^/]*/[^/]*)/([^/]*/[^/]*)/([^/]*/[^/]*) /models/?${filtermap:$1}&${filtermap:$2}&${filtermap:$3}&${filtermap:$4}&${filtermap:$5}&${filtermap:$6} [NC,L] 

RewriteCond ${filtermap:$5|NOT_FOUND} !NOT_FOUND [NC] 
RewriteRule ^models/([^/]*/[^/]*)/([^/]*/[^/]*)/([^/]*/[^/]*)/([^/]*/[^/]*)/([^/]*/[^/]*)     /models/?${filtermap:$1}&${filtermap:$2}&${filtermap:$3}&${filtermap:$4}&${filtermap:$5} [NC,L] 

RewriteCond ${filtermap:$4|NOT_FOUND} !NOT_FOUND [NC] 
RewriteRule ^models/([^/]*/[^/]*)/([^/]*/[^/]*)/([^/]*/[^/]*)/([^/]*/[^/]*)        /models/?${filtermap:$1}&${filtermap:$2}&${filtermap:$3}&${filtermap:$4} [NC,L] 

RewriteCond ${filtermap:$3|NOT_FOUND} !NOT_FOUND [NC] 
RewriteRule ^models/([^/]*/[^/]*)/([^/]*/[^/]*)/([^/]*/[^/]*)            /models/?${filtermap:$1}&${filtermap:$2}&${filtermap:$3} [NC,L] 

RewriteCond ${filtermap:$2|NOT_FOUND} !NOT_FOUND [NC] 
RewriteRule ^models/([^/]*/[^/]*)/([^/]*/[^/]*)               /models/?${filtermap:$1}&${filtermap:$2} [NC,L] 

RewriteCond ${filtermap:$1|NOT_FOUND} !NOT_FOUND [NC] 
RewriteRule ^models/([^/]*/[^/]*)                   /models/?${filtermap:$1} [NC,L] 

它不是很漂亮,但它確實有效。濾波器圖看起來像這樣

p1/v1 p1=v1 
    p2/v2 p2=v2 
... 

這不是一個理想的解決方案,如果您的P1/V1的組合是無限的,但我是有限的所以它很容易管理。

+0

評論,您可以再花費9美元並在ISAPI_Rewrite 3中使用$$ 10 - $$ 99值 – Andrew