我在web.config中创建了两个url重写规则,如下所示:
重写url =“〜/ Products /(.+).aspx”to =“〜/ Products.aspx?Cat = $ 1”
重写url =“〜/ Products /(.+)/(++).aspx”to =“〜/ Products.aspx?Cat = $ 1& SubCat = $ 2”
如果我输入Products / xyz.aspx它可以很好地工作但是如果我尝试实现像Products / xyx / abc.aspx这样的第二个规则的URL,它会将xyz和abc传递给Cat而不是SubCat。任何想法我怎么能让它来处理它们?
答案 0 :(得分:0)
尝试让你的正则表达式非贪婪:
rewrite url="~/Products/(.+?)/(.+).aspx" to="~/Products.aspx?Cat=$1&SubCat=$2"
^
答案 1 :(得分:0)
那是因为正则表达式匹配 greedy 。第一行中的(.+)
尽可能匹配,包括xyz/abc
。您问题的快速解决方法可能是更改第一个使用([^/]+)
的模式(您可能必须以某种方式逃离/
,具体取决于您的环境)。
答案 2 :(得分: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"