我在IIS 7.5网站上进行了URL重写设置:http://site1.com/
这充当第二个站点的反向代理:http://site2.com/
以下是事件流程:
1.浏览器在http://site1.com/somepath上进行GET
2.这会传递到site2,因为site1是URL Rewrite反向代理。这很有效,主机设置正确,因为我已经完成了需要这个的mod
3. site2以301状态响应,并将HTTP Location标头设置为http://site3.com/somenewpath
4. site1使用301 响应浏览器,但使用site1替换Location标头中的主机:http://site1.com/somenewpath
我希望在步骤4中发生的是,site1在HTTP Location标头中以http://site3.com/somenewpath响应并直接传递此数据。我觉得必须有一个出境规则可以用来解决这个问题,但还没有能够解决这个问题。
答案 0 :(得分:25)
可以Application Request Routing参与吗?看看IIS - >机器或站点 - >应用程序请求路由缓存 - >服务器代理设置并取消选中“在响应标头中反向重写主机”复选框。如果您在机器级别执行此操作,它将对所有站点生效。如果您在特定网站上进行此操作,它将仅对该网站生效,并且该框中的其他网站将不受影响。
答案 1 :(得分:6)
正如我在上面的评论中所说,我认为反向代理的默认行为是不受影响地传递响应(假设没有设置出站重写规则)。但是,我还没有专门针对来自代理服务器后面的服务器的301响应来测试您的场景。
如果确实需要特殊的出站规则,此代码会修改所有301个回复的http://site3.com/somepath
的HTTP位置标头<outboundRules>
<!-- This rule changes the domain in the HTTP location header for redirect responses -->
<rule name="Change Location Header">
<match serverVariable="RESPONSE_LOCATION" pattern="^http://[^/]+/(.*)" />
<conditions>
<add input="{RESPONSE_STATUS}" pattern="^301" />
</conditions>
<action type="Rewrite" value="http://www.site3.com/{R:1}" />
</rule>
</outboundRules>
中发布的规则