【问题标题】:Url rewriting with IIS 6 and MVC 3使用 IIS 6 和 MVC 3 重写 URL
【发布时间】:2012-07-03 08:54:39
【问题描述】:

我有一个看起来像的网址

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

此网站是一个 IIS 6 MVC 3 应用程序,使用 Helicon Isapi_Rewrite 进行 url 重写。

【问题讨论】:

  • 我不知道如何在 Helicon 中执行此操作,但 IIRF 包含将查询字符串参数转换为 url 路径段的示例,反之亦然。您可以将这些示例应用到 Helicon,或者只使用 IIRF。 cheeso.members.winisp.net/Iirf21Help/html/…
  • 为什么不用mvc内置的URL路由引擎呢?

标签: asp.net-mvc mod-rewrite url-rewriting iis-6 isapi-rewrite


【解决方案1】:

最好的方法是创建一组规则,每个规则将处理 1 对、2 对、3 对参数...

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]

【讨论】:

  • 这种方法有效,但是,您的价格限制在 1 美元到 9 美元之间。我想出了一个使用地图文件的解决方案。见答案。
  • 我为你提供了$1-$9问题的解决方案,看评论
【解决方案2】:

我使用地图提出了这个解决方案。我遇到的主要问题是超出了对占位符 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 组合是无限的,这不是一个理想的解决方案,但我的组合是有限的,所以它很容易管理。

【讨论】:

  • 您可以进一步使用 $9 并在 ISAPI_Rewrite 3 中使用 $$10-$$99 的值
猜你喜欢
  • 2011-02-12
  • 1970-01-01
  • 1970-01-01
  • 2011-04-07
  • 1970-01-01
  • 2019-10-26
  • 2011-12-04
  • 2011-12-22
  • 2010-10-07
相关资源
最近更新 更多