IIS基于长度参数重写规则

时间:2016-02-12 13:57:42

标签: url iis url-rewriting rewrite

我有以下重写规则

<rule name="Product short redirect" stopProcessing="true">
      <match url="product/([A-Za-z0-9]+)/$" ignoreCase="true" />
      <action type="Redirect" redirectType="Permanent"  url="product-redirect/?code={R:1}" />
    </rule>

但我希望它只匹配超过3个字符的产品代码

<rule name="Product short redirect" stopProcessing="true">
      <match url="product/([A-Za-z0-9].{4}+)/$" ignoreCase="true" />
      <action type="Redirect" redirectType="Permanent"  url="product-redirect/?code={R:1}" />
    </rule>

但这只返回部分匹配,而且三个字符代码仍然匹配??

示例部分网址将为:

product/u22tfp1/

product/xxx/

1 个答案:

答案 0 :(得分:0)

如果您只想匹配4个字符或更多字符的产品,则需要在正则表达式上指定长度:

E.G:想要匹配(products/1234/ OR products/12345/

<match url="product\/([A-Za-z0-9]{4,100}+)\/$" />

我在这个例子中使用了4到100之间的匹配(你也可以明确地避免与3个字符匹配,但在我看来它看起来更加丑陋)

注意: 上一个正则表达式product/([A-Za-z0-9].{4}+)/$的问题是匹配所有内容的点字符.,基本上您说匹配:

 "product/" then 
 "a single character/digit [a-Z0-9]" then 
 "anything with a length of 4"(repeat this last statement "+" )