传出 IIS URL 重写规则

传出 IIS URL 重写规则

我有以下传出的 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 元素不包含旅行?

相关内容