IIS URL Rewrite默认站点HTTPS根路径无法跳转至/app路径问题
问题根因
现有规则仅在请求为HTTP协议({HTTPS}值为OFF)时触发,用户直接访问HTTPS根路径时不满足规则触发条件,自然不会执行跳转。另外贴出的配置里HTTP跳转规则的enabled属性设为了false,规则本身处于关闭状态,实际运行时HTTP请求也不会被该规则处理。
修复方案
需要配置两条优先级明确的重写规则,先处理HTTP转HTTPS逻辑,再处理HTTPS协议下的路径跳转,同时添加排除条件避免重定向死循环,直接替换站点web.config中对应的<rewrite>节点即可:
<rewrite> <rules> <!-- 规则1:所有HTTP请求统一跳转至HTTPS的/app路径 --> <rule name="HTTP to HTTPS" enabled="true" stopProcessing="true"> <match url="(.*)" /> <conditions> <add input="{HTTPS}" pattern="^OFF$" /> </conditions> <action type="Redirect" url="https://{HTTP_HOST}/app" redirectType="Temporary" /> </rule> <!-- 规则2:HTTPS协议下非/app路径的请求统一跳转至/app --> <rule name="HTTPS Path to /app" enabled="true" stopProcessing="true"> <match url="(.*)" /> <conditions logicalGrouping="MatchAll"> <add input="{HTTPS}" pattern="^ON$" /> <!-- 排除已处于/app路径下的请求,防止循环重定向 --> <add input="{REQUEST_URI}" pattern="^/app(/.*)?$" negate="true" /> </conditions> <action type="Redirect" url="https://{HTTP_HOST}/app" redirectType="Temporary" /> </rule> </rules> </rewrite>
注意事项
- 测试阶段建议用
Temporary(307临时重定向),确认规则符合预期后再改成Permanent(301永久重定向),避免浏览器缓存错误跳转规则影响调试。 - 规则必须按上述顺序排列,IIS会按照规则在配置中出现的先后顺序从上到下匹配,顺序错乱会导致逻辑异常。
- 如果/app是站点下的独立应用,确认该应用下没有配置会覆盖根节点规则的重写配置,避免规则不生效。
内容的提问来源于stack exchange,提问作者BSanders
相关产品推荐
相关产品推荐

