2012-07-02 32 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