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

IIS Rewrite规则异常:URL自动移除test/前缀致访问故障

问题分析与解决方案

你的问题核心在于出站规则没有处理后端返回的Location响应头,同时现有HTML标签重写规则的匹配逻辑也存在疏漏,导致浏览器地址栏里的test/前缀被意外移除。

具体问题点

  1. 当后端服务(比如Mantis登录跳转)返回Location: /mantis/login_page.php这类重定向响应头时,你的现有规则没有对这个头进行重写,浏览器会直接跳转到不带test/的URL。
  2. 现有AddPrefix规则的匹配模式没有精准覆盖所有路径场景,替换逻辑可能导致前缀丢失。

修正后的完整配置

<rules> 
 <rule name="ToMonceau" stopProcessing="true"> 
 <match url="test/(.*)" /> 
 <action type="Rewrite" url="http://10.5.5.83/{R:1}" /> 
 <serverVariables> 
 <set name="HTTP_X_ORIGINAL_ACCEPT_ENCODING" value="{HTTP_ACCEPT_ENCODING}" /> 
 <set name="HTTP_ACCEPT_ENCODING" value="" /> 
 </serverVariables> 
 </rule> 
</rules> 
<outboundRules> 
 <!-- 处理HTML中的资源链接(A/Img/Link/Script) -->
 <rule name="RewriteHTMLLinks" preCondition="IsText" enabled="true"> 
 <match filterByTags="A, Img, Link, Script" pattern="^/(mantis/.*)" /> 
 <conditions> 
 <add input="{URL}" pattern="^/test/mantis/.*" /> 
 </conditions> 
 <action type="Rewrite" value="/test/{R:1}" /> 
 </rule> 
 <!-- 处理后端返回的Location重定向头 -->
 <rule name="RewriteLocationHeader" preCondition="IsRedirect" enabled="true"> 
 <match serverVariable="RESPONSE_Location" pattern="^http://10.5.5.83/(.*)" /> 
 <action type="Rewrite" value="/test/{R:1}" /> 
 </rule>
 <rule name="RestoreAcceptEncoding" preCondition="NeedsRestoringAcceptEncoding"> 
 <match serverVariable="HTTP_ACCEPT_ENCODING" pattern="^(.*)" /> 
 <action type="Rewrite" value="{HTTP_X_ORIGINAL_ACCEPT_ENCODING}" /> 
 </rule> 
 <preConditions> 
 <preCondition name="IsText"> 
 <add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/(.+)" /> 
 </preCondition> 
 <preCondition name="NeedsRestoringAcceptEncoding"> 
 <add input="{HTTP_X_ORIGINAL_ACCEPT_ENCODING}" pattern=".*" /> 
 </preCondition>
 <!-- 新增:匹配重定向响应状态码 -->
 <preCondition name="IsRedirect">
 <add input="{RESPONSE_STATUS}" pattern="3(0[12378])" />
 </preCondition> 
 </preConditions> 
</outboundRules>

关键修改说明

  1. 添加RewriteLocationHeader规则:

    • 专门处理后端返回的Location响应头,把后端返回的http://10.5.5.83/mantis/xxx重写为/test/mantis/xxx,确保浏览器跳转到带test/前缀的URL。
    • 新增IsRedirect预条件,只针对301/302/303/307/308这类重定向状态码生效,避免不必要的处理。
  2. 优化RewriteHTMLLinks规则(原AddPrefix):

    • 简化匹配模式,直接匹配以/mantis/开头的路径,替换为/test/mantis/xxx,逻辑更清晰,避免原规则中分组导致的前缀丢失问题。
    • 条件判断更精准,只在当前请求URL是/test/mantis/开头时才触发重写。
  3. 给入站规则添加stopProcessing="true":

    • 确保匹配到test/(.*)后不再处理后续的入站规则,避免冲突。

额外注意事项

  • 确保你的IIS服务器已经安装了URL Rewrite模块和**Application Request Routing (ARR)**组件,ARR需要启用代理功能(在IIS管理器的服务器节点下,找到ARR,点击"Server Proxy Settings",勾选"Enable proxy")。
  • 如果后端服务返回的是相对路径(比如/mantis/xxx而不是完整URL),可以调整RewriteLocationHeader的匹配模式为^/(mantis/.*),对应替换值为/test/{R:1}。

内容的提问来源于stack exchange,提问作者Stéphane Delarue

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:24:34