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

IIS URL重写正则规则需求:提取编码后RecId并生成目标重定向URL

解决IIS中URL重写提取编码后ID的问题

当然可以实现!首先咱们先明确编码规则:你提到的31333535对应实际ID1355,看得出来是每个实际数字前面都加了一个固定的"3"——比如1变成31,3变成33,以此类推。基于这个规则,我们可以通过正则配合IIS URL重写的功能来完成转换。

步骤1:匹配并捕获编码后的ID参数

首先,我们需要在IIS重写规则的条件中,精准捕获rq_RecId后面的编码值。可以用这个正则来匹配查询字符串:

.*rq_RecId=((?:3[0-9])+).*
  • ((?:3[0-9])+):这部分是核心捕获组,(?:3[0-9])匹配一个"3"+数字的组合(非捕获组,避免多余分组),+表示匹配至少一个这样的组合,刚好对应编码后的ID(比如31333535)。

步骤2:转换编码值为实际ID

捕获到编码值后,我们需要把每个"3X"替换成"X"。IIS URL重写支持在替换字符串中使用.NET正则替换函数,直接对捕获的编码值做转换:

/doc/{REGEX::Replace({C:1}, '3([0-9])', '$1')}
  • {C:1}:引用第一步捕获到的编码后ID值;
  • REGEX::Replace(...):调用正则替换,把每一个"3"后面跟着的数字单独提取出来($1就是匹配到的数字),最终把31333535转换成1355。

完整的IIS重写规则示例

把这些整合到web.config的重写规则里,大概是这样:

<rewrite>
  <rules>
    <rule name="Redirect Encoded RecId to Doc URL" stopProcessing="true">
      <match url="^default\.asp$" />
      <conditions logicalGrouping="MatchAll">
        <add input="{QUERY_STRING}" pattern=".*rq_RecId=((?:3[0-9])+).*" />
      </conditions>
      <action type="Redirect" url="/doc/{REGEX::Replace({C:1}, '3([0-9])', '$1')}" redirectType="Permanent" />
    </rule>
  </rules>
</rewrite>

额外说明

  • 因为你提到实际ID范围是1-9999,所以编码后的长度会是2-8位(每个数字对应两位编码),上面的正则已经覆盖了这种情况;
  • 如果URL中还有其他参数,这个规则不会影响,只要rq_RecId存在就会触发重定向;
  • redirectType="Permanent"是301永久重定向,如果你需要临时重定向,可以改成Temporary。

内容的提问来源于stack exchange,提问作者Philipp Hungerbühler

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 17:58:11