为什么IIS Rewrite重定向不生效?URL重写规则配置问题排查
问题诊断&解决方法
现有配置核心错误
- 第一版规则的
enabled属性设为了false,规则处于未启用状态,完全不会触发 - 匹配规则存在语法错误:
- 第一版的
match url值为sso /(.*),中间多了冗余空格,和实际请求路径的sso/xxx格式不匹配 - 第二版规则指定了
patternSyntax="ECMAScript"(正则语法),但写的是通配符格式* sso / *,语法不兼容,无法匹配任何请求
- 第一版的
- 第一版跳转目标写为
http://localhost:81/{R:1},仅服务器本地测试跳转有效,外部用户访问会跳转到用户本地的localhost,无法正常访问
正确配置(分两种场景)
场景1:需要地址栏跳转(用户可见端口变化)
<rewrite> <globalRules> <rule name="跳转sso路径到81端口" enabled="true" patternSyntax="ECMAScript" stopProcessing="true"> <match url="^sso/(.*)$" /> <action type="Redirect" url="http://my.domain:81/{R:1}" appendQueryString="true" redirectType="Temporary" /> </rule> </globalRules> </rewrite>
测试确认正常后可以把redirectType改为Permanent启用永久重定向。
场景2:需要地址栏不变,后端代理转发(用户看不到端口)
先确认已经开启ARR的代理功能,再使用以下规则:
<rewrite> <globalRules> <rule name="代理sso路径到81端口" enabled="true" patternSyntax="ECMAScript" stopProcessing="true"> <match url="^sso/(.*)$" /> <action type="Rewrite" url="http://localhost:81/{R:1}" appendQueryString="true" /> </rule> </globalRules> </rewrite>
后续排查步骤
如果修改后仍然无法生效:
- 先清理浏览器缓存,临时重定向和永久重定向都会被浏览器缓存,也可以直接用浏览器无痕模式测试
- 确认IIS的URL Rewrite模块、ARR模块都已经正确安装,没有运行报错
- 测试路径和匹配路径保持一致,避免出现测试用
/sso/mon_app但实际需求是/sso/my_app的低级错误 - 重新配置失败请求跟踪规则,匹配路径设为
*,捕获状态码覆盖3xx/4xx/5xx全范围,再重新测试查看日志
内容的提问来源于stack exchange,提问作者user16761658
相关产品推荐
相关产品推荐

