寻找一些帮助,为具有不同查询字符串参数的同一页面设置al UrlRewrite。
以下是我要重写的两个网址
stockists.aspx?product=1&fragrance=2
stockists.aspx?store=1
我首先为 stockists.aspx?product = 1& fragrance = 2 (在config / UrlRewriting.config中)设置了网址重写并成功测试。
<add name="Stockists"
virtualUrl="^~/stockists/(.*)/(.*).aspx"
rewriteUrlParameter="ExcludeFromClientQueryString"
destinationUrl="~/stockists.aspx?product=$1&fragrance=$2"
ignoreCase="true" />
然后我为 stockists.aspx?store = 1 (在config / UrlRewriting.config中)设置了url重写,现在这两个url都没有重写。
<add name="Stores"
virtualUrl="^~/stockists/(.*).aspx"
rewriteUrlParameter="ExcludeFromClientQueryString"
destinationUrl="~/stockists.aspx?store=$1"
ignoreCase="true" />
有关如何实现上述目标的任何建议?
答案 0 :(得分:1)
就像现在一样,Stores重写也会匹配Stockists重写匹配的url格式。 (.*)
匹配任意数量的任何字符。要解决此问题,应将每个(.*)
更改为([^/]+)
。这将匹配除正斜杠之外的任何字符,并确保至少有一个字符。
<add name="Stockists"
virtualUrl="^~/stockists/([^/]+)/([^/]+).aspx"
rewriteUrlParameter="ExcludeFromClientQueryString"
destinationUrl="~/stockists.aspx?product=$1&fragrance=$2"
ignoreCase="true" />
<add name="Stores"
virtualUrl="^~/stockists/([^/]+).aspx"
rewriteUrlParameter="ExcludeFromClientQueryString"
destinationUrl="~/stockists.aspx?store=$1"
ignoreCase="true" />
现在,这可能无法完全解决问题,但它应该允许Stockists重写再次工作。我怀疑Stores重写还有其他问题,但Stockists重写停止了工作,因为url模式与Stores重写相匹配。