我有以下传出的 IIS URL 重写规则:
<outboundRules>
<rule name="ReverseProxyOutboundRule1" preCondition="ResponseIsHtml1" enabled="true">
<match filterByTags="A, Form" pattern="^(travel.*)" negate="true" />
<action type="Rewrite" value="http://www.traveldomain.com/{R:0}" />
</rule>
<preConditions>
<preCondition name="ResponseIsHtml1">
<add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />
</preCondition>
</preConditions>
</outboundRules>
基本上,IIS 配置为充当反向代理。请求进入后,它们被代理到后端服务器,然后在返回给最终用户之前,我需要修改所有不包含 /travel...[任何其他内容] 的链接,使其来自不同的域 (www.traveldomain.com)
重写规则似乎被触发了,但如果我的链接以 /foo 开头,它会被重写为 www.traveldomain.com,而不是 www.traveldomain.com/foo
换句话说,{R:0} 并未按预期附加。我尝试过 {R:0} 和 {R:1} - 似乎都没有用。我做错了什么?
编辑
我比较接近这个规则
<outboundRules>
<rule name="ReverseProxyOutboundRule1" preCondition="ResponseIsHtml" enabled="true">
<match filterByTags="A, Form" pattern="^/(.*)" />
<action type="Rewrite" value="http://www.traveldomain.com{R:1}" />
</rule>
<preConditions>
<preCondition name="ResponseIsHtml">
<add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />
</preCondition>
</preConditions>
</outboundRules>
但这会重写所有的 URL 而我只想重写不包含 /travel 的 URL...
也许我需要添加一些声明,但我不确定如何说 A 或 FORM 元素不包含旅行?