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

如何使用IIS Rewrite替换URL中的%5E以适配目标应用?

哎,这个问题我太熟了!之前帮朋友排查过几乎一样的场景,咱们来一步步搞定它~

首先得说清楚你之前的规则为啥没生效:IIS URL Rewrite模块默认会先对URL进行解码,再执行匹配逻辑。当Safari发送%5E时,IIS已经自动把它解码成^了,你写的正则(.*)%5E(.*)自然匹配不到任何内容,规则当然不会触发。而且就算你侥幸匹配到了,默认情况下IIS还会把重写后的URL再次编码,把^又转回%5E,等于白忙活一场。

正确的IIS Rewrite规则配置

你需要针对性地调整规则,让它在原始未编码的URL上匹配,同时禁用重写后的URL编码,确保^能以明文形式传递给目标应用。具体步骤如下:

  1. 打开IIS管理器,找到你的目标站点,进入「URL重写」功能
  2. 点击「添加规则」,选择「空白规则」
  3. 按以下内容配置:
    • 规则名称:比如Replace %5E with ^ in Query String(起个好记的名字)
    • 匹配URL:
      • 请求路径:选择「与模式匹配」
      • 模式:^application\.aspx$(注意转义点号,确保只匹配目标页面)
      • 使用:正则表达式
      • 勾选「使用原始URL编码」(这是核心!让模块用未解码的原始URL来匹配)
    • 条件:
      • 点击「添加」,设置:
        • 输入:{QUERY_STRING}
        • 检查输入字符串是否:与模式匹配
        • 模式:(.*)%5E(.*)(匹配包含%5E的查询字符串)
        • 忽略大小写:勾选
    • 操作:
      • 操作类型:重写
      • 重写URL:application.aspx?{C:1}^{C:2}(把匹配到的前后内容用^连接)
      • 勾选「停止处理后续规则」
      • 点击重写URL右侧的「...」按钮,在弹窗里勾选「不编码重写后的URL」(避免^被再次转成%5E)
  4. 点击「应用」保存规则

对应的web.config代码如下(直接复制粘贴也能用):

<rewrite>
  <rules>
    <rule name="Replace %5E with ^ in Query String" stopProcessing="true">
      <match url="^application\.aspx$" useOriginalURLEncoding="true" />
      <conditions>
        <add input="{QUERY_STRING}" pattern="(.*)%5E(.*)" />
      </conditions>
      <action type="Rewrite" url="application.aspx?{C:1}^{C:2}" encodeUrl="false" />
    </rule>
  </rules>
</rewrite>

为啥这个规则能生效?

  • useOriginalURLEncoding="true":让Rewrite模块直接识别原始URL里的%5E,而不是先解码成^
  • encodeUrl="false":禁止IIS对重写后的URL编码,确保^以明文形式传递给目标应用
  • 精准的匹配条件:只针对目标页面和包含%5E的查询字符串生效,不会影响其他请求

额外测试建议

配置完之后,用Safari访问测试URL,去目标应用的请求日志里确认一下:查询字符串里的%5E是不是已经被替换成^了。如果还是没生效,可以开启IIS Rewrite的日志功能(在「URL重写」右侧点击「查看日志」),排查是匹配环节还是操作环节出了问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 16:12:36