我正在尝试在 UrlRewrite 中配置一个有 2 个条件的规则:
- HTTP 标头
HTTP_HOST
需要匹配某个域 (api.contoso.com)
- 自定义 HTTP 标头
x-app-version
需要出现在 HTTP 请求中
根据此信息,我想重定向到后端 API 的不同版本。
Problem该规则在第一个条件下的行为符合预期。
当它开始时HTTP_HOST
匹配 api.contoso.com。
然而,它忽略了我的习惯x-app-version
header.
假设因此,我担心 UrlRewrite 条件只能与下拉列表中有限的一组预定义 HTTP 标头结合定义(HTTP_HOST
, REMOTE_ADDRESS
, REMOTE_HOST
, …)
Question假设是正确的还是这应该是可能的?
我的配置或其他基于自定义定义的 HTTP 标头的条件的方法是否存在错误?
<rule name="ARR_test2" enabled="false">
<match url="(.*)" />
<conditions>
<add input="{HTTP_HOST}" pattern="api.contoso.com" />
<add input="{x-app-version}" pattern="1" />
</conditions>
<action type="Rewrite" url="https://FARM_apiv1/{R:0}" />
</rule>
好的,我发现了如何在 UrlRewrite 条件下使用自定义 HTTP 标头:
- 自定义标头前面需要带有“HTTP_”。
- 用下划线替换破折号
例如:为了检索我的自定义标头“x-app-version”,我可以使用“HTTP_x_app_version”。
所以我的 UrlRewrite 配置应该如下所示
<rule name="ARR_test2" enabled="false">
<match url="(.*)" />
<conditions>
<add input="{HTTP_HOST}" pattern="api.contoso.com" />
<add input="{HTTP_x_app_version}" pattern="1" />
</conditions>
<action type="Rewrite" url="https://FARM_apiv1/{R:0}" />
</rule>
其实文档里已经说得很清楚了:https://msdn.microsoft.com/en-us/library/ms524602(v=vs.90).aspx
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)