asp.net-core - 用 IIS 重定向映射替换特定的查询字符串值
问题描述
我正在尝试为 .NET Core 项目创建一个重定向规则,该规则将替换查询字符串值,以帮助在某些标识符上部署迁移。例如网址:
http://www.somesite.com/page.html?somevar=abc&id=1234&othervar=cde
应该重定向到
http://www.somesite.com/page.html?somevar=abc&id=b64540a6-b12d-443f-973f-673e4451ccbe&othervar=cde
在重写文件中,我创建了一个重写映射,如下所示:
<rewriteMaps>
<rewriteMap name="newIdentifierMap">
<add key="1234" value="b64540a6-b12d-443f-973f-673e4451ccbe" />
</rewriteMap>
</rewriteMaps>
但现在我在创建使用此地图的规则时遇到了一些麻烦。这就是我正在做的...
<rule>
<match url=".*" />
<conditions>
<add input="{newIdentifierMap:REQUEST_URI}" pattern="(.*)id=([0-9]+)(.*)" />
</conditions>
<action type="Redirect" url="" RedirectType="Permanent" />
</rule>
现在我被阻止了,不知道如何准确地替换地图中的值。谢谢你的帮助!
解决方案
在检查了@abraham-qian 提供的答案后,我能够通过应用以下规则来解决问题:
<rule>
<match url="(.*)" />
<conditions>
<add input="{QUERY_STRING}" pattern="(.*)(\bid=([0-9]+))(.*)" />
</conditions>
<action type="Redirect" url="{R:0}?{C:1}id={newIdentifierMap:{C:3}}{C:4}" RedirectType="Permanent" appendQueryString="false" />
</rule>
<rewriteMaps>
<rewriteMap name="newIdentifierMap">
<add key="1234" value="b64540a6-b12d-443f-973f-673e4451ccbe" />
</rewriteMap>
</rewriteMaps>
这似乎适用于查询字符串中 id 变量之前或之后的任意数量的变量。
解决方案
为了匹配 ID 段,我们可以使用{Query_String}
服务器变量。
请参考下面的代码片段,
<rewrite>
<rules>
<rule name="MyRules" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{QUERY_STRING}" pattern="(.*)(\bid=([0-9]+))(.*)" />
</conditions>
<!--{C:3} is the value of id, it is referred by the above condition.-->
<action type="Redirect" url="Https://vabqia969vm:448/{MyMap:{C:3}}" appendQueryString="false" />
</rule>
</rules>
<rewriteMaps>
<rewriteMap name="MyMapName" defaultValue="">
<add key="1234" value="HtmlPage1.html"></add>
</rewriteMap>
</rewriteMaps>
</rewrite>
但是,存在一个问题,我们应该取消选中该选项Append Query String
,否则将导致无限循环,因为附加的查询字符串满足条件。我们必须一一匹配每个查询字段。像这样,
(somevar=.*)&(\bid=([0-9]+))&(othervar=.*)
我们最好根据您的情况修改规则。
如果有什么我可以帮忙的,请随时告诉我。
推荐阅读
- c# - 如何使用 jQuery AJAX 调用 ASP.Net 字符串函数?
- python - Boto3 DynamoDB:查询“key”的最有效方法不是以“SomeValue”开头
- python - 执行while循环时出错“循环被随机转义”Python
- c++ - 复制构造函数和向量的问题
- python - 使用python实现图像分割时神经网络中的维度错误
- javascript - 使用参数和值将字符串数组转换为对象
- java - 执行自定义 jpa 存储库方法时未找到类型 [EntityName] 的属性 [MethodName]
- php - WordPress 页面缓存,未在页面中加载新的 .txt 数据
- reactjs - 如何在 React.tsx 中动态添加和删除表行
- swiftui - 应用程序终止时未保存图像列表的 SwiftUI 拖放重新排序