如何在Web.config中配置URL重定向以去除多余斜杠?
解决IIS URL重定向中查询字符串前的多余斜杠问题
问题分析
你的规则在处理/users?text=smith时,^users(.*)会匹配到users,此时{R:1}为空字符串,重定向URL变为candidates。但IIS URL重写模块可能因原URL无后缀路径,自动在candidates和查询字符串之间添加斜杠(尤其当candidates是实际存在的目录时),导致出现/candidates/?text=smith的结果。
解决方案
方案1:拆分规则(清晰直观)
分别处理无路径后缀和带路径后缀的两种场景:
<!-- 处理不带路径的 /users?xxx 重定向 --> <rule name="Redirect Users Root to Candidates" stopProcessing="true"> <match url="^users$" /> <action type="Redirect" url="candidates" /> </rule> <!-- 处理带路径的 /users/xxx 重定向 --> <rule name="Redirect Users Path to Candidates" stopProcessing="true"> <match url="^users/(.*)$" /> <action type="Redirect" url="candidates/{R:1}" /> </rule>
方案2:优化单个正则规则(简洁高效)
调整匹配模式,明确处理users后的可选斜杠,避免空匹配导致的斜杠问题:
<rule name="Redirect Users to Candidates" stopProcessing="true"> <match url="^users(/?.*)$" /> <action type="Redirect" url="candidates{R:1}" /> </rule>
验证效果
- 访问
/users?text=smith会重定向到/candidates?text=smith(无多余斜杠) - 访问
/users/A123456会重定向到/candidates/A123456(正常保留路径)
内容的提问来源于stack exchange,提问作者Lew
相关产品推荐
相关产品推荐

