C# 如何通过web.config从url中删除querystring
我需要301重定向的所有网址,如 xyz.com/searchitems?key1=val1&key2=val2 xyz.com/searchitems i、 我希望从URL中删除查询字符串。到目前为止,我已经在我的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
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”)代码>