1

我在 web.config 中创建了 2 个 url 重写规则,如下所示:

重写 url="~/Products/(.+).aspx" 为="~/Products.aspx?Cat=$1"

重写 url="~/Products/(.+)/(.+).aspx" 为="~/Products.aspx?Cat=$1&SubCat=$2"

如果我输入 Products/xyz.aspx 它可以完美运行,但如果我尝试一个实现第二条规则的 URL,例如 Products/xyx/abc.aspx,它会将 xyz 和 abc 都传递给 Cat 而不是 SubCat。有什么想法可以让它同时处理这两个问题吗?

4

3 回答 3

0

尝试使您的正则表达式不贪婪:

rewrite url="~/Products/(.+?)/(.+).aspx" to="~/Products.aspx?Cat=$1&SubCat=$2"
                           ^
于 2010-12-22T07:28:21.473 回答
0

那是因为正则表达式匹配是贪婪的。第一(.+)行中的 尽可能匹配,包括xyz/abc. 快速解决您的问题的方法可能是更改要使用的第一个模式(根据您的环境,([^/]+)您可能必须以某种方式转义)。/

于 2010-12-22T07:29:31.617 回答
0

我建议删除“。”上的所有匹配项。符号,因为它会使您的匹配更难预测。而是使用涵盖您的产品类别和子类别的任何字符模式。

rewrite url="~/Products/([a-zA-Z0-9]+).aspx" to="~/Products.aspx?Cat=$1"

rewrite url="~/Products/[a-zA-Z0-9]+)/[a-zA-Z0-9]+).aspx" to="~/Products.aspx?Cat=$1&SubCat=$2"
于 2010-12-22T08:23:51.233 回答