Urlrewriter.net匹配规则返回很多

时间:2012-03-09 12:46:35

标签: asp.net url-rewriting rewrite

这是我们的重写规则:

<rewrite url="/Product/(.+)/" to="~/ProductDetails?ProductID=$1" />

它适用于

www.website.com/product/34/nice-red-jacket

然后我们得到ProductID=34

但是,只要网址中有另一个正斜杠

,它就会失败
www.website.com/product/34/nice-red-jacket/special-edition/buy-now/

结果为ProductID=34%2fnice-red-jacket%2fspecial-edition%2fbuy-now

我们需要更改我们的重写规则以在第一个/下一个斜杠处停止匹配,但我们如何做到这一点?

1 个答案:

答案 0 :(得分:1)

试试这个表达

^/Product/(\d+)/?.*$

<rewrite url="^/Product/(\d+)/?.*$" to="~/ProductDetails?ProductID=$1" />

第一组(\d+)表示匹配至少一个数字,该数字代表ID,/可以跟随或不跟随任何字符。 ^ and $标志着比赛的开始和结束。

这里有一些测试数据

var reg = new Regex(@"^/Product/(\d+)/?.*$");

var urls = new []
    { 
        "/Product/1",
        "/Product/2/23/asd",
        "/Product/3/21334/asd/",
        "/Product/5/32/asd/asd",           
    };

urls.Select(url=> reg.Replace(url,"~/ProductDetails?ProductID=${1}"))
    .Dump();