You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

IIS URL Rewrite规则在URL无尾部斜杠时不触发的解决方法

IIS URL Rewrite规则无法匹配无尾部斜杠的URL问题

当前配置的规则

<rule name="MyRule" patternSyntax="ECMAScript" stopProcessing="true">
  <match url="Develop([/]?.*)" />
  <conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
  <action type="Rewrite" url="http://localhost:8081{R:1}" logRewrittenUrl="false" />
</rule>

重写成功的场景

  • https://mysite/Develop/
  • https://mysite/Develop/Some/Any/Stuff

重写失败的场景

  • https://mysite/Develop(URL末尾不带斜杠)

尝试过的无效规则

<rule name="MyRule0" stopProcessing="true">
  <match url="^Develop$" />
  <conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
  <action type="Rewrite" url="http://localhost:8081/" />
</rule>

解决方案1:调整原规则正则,覆盖无斜杠场景

直接修改原规则的匹配正则,让它同时兼容有无斜杠的情况:

<rule name="MyRule" patternSyntax="ECMAScript" stopProcessing="true">
  <match url="^Develop(/.*)?$" />
  <conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
  <action type="Rewrite" url="http://localhost:8081{R:1}" logRewrittenUrl="false" />
</rule>

这个正则的逻辑:

  • ^Develop 匹配开头的固定字符串
  • (/.*)? 匹配可选的斜杠+任意路径(包括空,对应无斜杠的情况)
  • $ 匹配URL结尾

无论请求是Develop、Develop/还是Develop/xxx,都会被匹配,无斜杠场景下R:1为空,重写后就是http://localhost:8081。

解决方案2:禁用IIS自动目录斜杠重定向

如果Develop是服务器上的物理目录,IIS默认会把无斜杠的/Develop自动301重定向到/Develop/,导致你的Rewrite规则根本没机会处理无斜杠请求。

在web.config的<system.webServer>节点下添加配置禁用该行为:

<directoryBrowse enabled="false" />
<rewrite>
  <rules>
    <!-- 放置你的Rewrite规则 -->
  </rules>
</rewrite>

解决方案3:调整规则顺序(保留两条规则的情况)

如果不想修改原规则,确保MyRule0放在MyRule前面,让它优先匹配无斜杠的场景:

<rule name="MyRule0" stopProcessing="true">
  <match url="^Develop$" ignoreCase="true" />
  <conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
  <action type="Rewrite" url="http://localhost:8081/" />
</rule>
<rule name="MyRule" patternSyntax="ECMAScript" stopProcessing="true">
  <match url="Develop([/]?.*)" />
  <conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
  <action type="Rewrite" url="http://localhost:8081{R:1}" logRewrittenUrl="false" />
</rule>

规则按顺序执行,MyRule0匹配到无斜杠的请求后直接停止处理,其他场景交给MyRule。

内容的提问来源于stack exchange,提问作者ElCondor1969

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 10:22:47