C# 如何通过web.config从url中删除querystring

C# 如何通过web.config从url中删除querystring,c#,asp.net,redirect,C#,Asp.net,Redirect,我需要301重定向的所有网址,如 xyz.com/searchitems?key1=val1&key2=val2 xyz.com/searchitems i、 我希望从URL中删除查询字符串。到目前为止,我已经在我的web.config <rewrite> <rules> <rule name="Rewrite to searchitems"> <match url=&q

我需要301重定向的所有网址,如

xyz.com/searchitems?key1=val1&key2=val2

xyz.com/searchitems

i、 我希望从URL中删除查询字符串。到目前为止,我已经在我的
web.config

        <rewrite>
      <rules>
        <rule name="Rewrite to searchitems">
          <match url="^searchitems?$" />
<conditions>
    <add input="{QUERY_STRING}" pattern="(.*)" />
  </conditions>
          <action type="Redirect" redirectType="Permanent" url="{R:0}" appendQueryString="false"  />
        </rule>
      </rules>
   </rewrite>

但它正在进行重定向循环

编辑:

我想删除这个查询字符串只是为了这个url“xyz.com/searchitems”,而不是所有的url。URL中可以有任意数量的查询字符串参数。

请尝试以下操作:

  <rewrite>
      <rules>
        <rule name="Custom rule" stopProcessing="true">
          <match url="^searchitems" />
          <conditions>
            <add input="{QUERY_STRING}" pattern="(.+)" />
          </conditions>
          <action type="Redirect" url="/searchitems" appendQueryString="false" />
        </rule>
      </rules>
    </rewrite>


“?”需要在正则表达式中转义。当前,您的规则与URL“searchitem”匹配,因为尾随的“s”由“?”变为可选。如果“?”是URL的文字部分,可能不会有重定向循环,因为生成的URL中没有“?”。)我也试过了,我猜只与一些参数匹配searchresults的模式是
“^(.*searchitems)\?.+$”
它现在甚至不匹配,只是打开xyz.com/searchitems?key1=val1&key2=val2用类似的东西对它进行单元测试:
Regex r=new Regex(@“^(.*searchitems)\?+$”;var b1=r.IsMatch(“xyz.com/searchitems?qsdfj=qsdkfj%20”);var b2=r.IsMatch(“xyz.com/searchitems?key1=val1&key2=val2”);var b3=r.IsMatch(“xyz.com/searchitems”);var b4=r.Matches(“xyz.com/searchitems?qsdfj=qsdkfj%20”)