我在ASP.Net站点上有以下重写规则,以使IIS充当反向代理:
<rewrite>
<rules>
<rule name="AppReverseProxy" enabled="true" stopProcessing="true">
<match url="([d|u|c]/.*)" />
<action type="Rewrite" url="http://127.0.0.1:12949/{R:1}" />
</rule>
</rules>
</rewrite>
基本上, domain.com/u/*
domain.com/d/*
或 domain.com/c/*
路径上的任何内容都将转发到本地服务器 . 这很好,通常我直到现在都没有问题 .
我正在让本地服务器返回 301 Permanent Redirect
,并将 Location
标头设置为子域,如: subdomain.domain.com/somePath
. 此子域指向完全不同的服务器 .
问题是IIS正在重写 Location
标头看起来像 domain.com/somePath
,它正在完全删除子域 . 我通过访问 domain.com:12949
的网站确认了它的IIS问题,并且它正确地重定向到子域 . 如何阻止IIS从本地服务器重写 Location
标头?
1 回答
Url重写可以在响应中重写标头,但默认情况下不应该这样做 . 由于未在网站的重写规则中配置,因此很可能在服务器级别启用了“应用程序请求路由”模块 .
在IIS管理器中,选择当前服务器(而不是网站),打开
Application Request Routing
,在右侧列中将有一个选项Server Proxy Settings
. 在那里你会看到"Reverse rewrite host in response headers"选项 . 如果选中它 - 取消选中它,你的问题就应该解决了 .ARR模块窗口的一些屏幕截图可供此URL参考:http://blogs.msdn.com/b/chiranth/archive/2014/08/03/application-request-routing-part-2-reverse-proxy-and-troubleshooting-arr-urlrewrite-issues.aspx