IIS UrlRewrite是用来做请求重定向IIS Extension.(https://www.cnblogs.com/Code-life/p/13210399.html). 但是它只是做一个重定向,后续的处理依然由Web Server针对新的Url进行处理。其在IIS中的执行流程如下:
因此,它只能将Url Rewrite到当前应用下的其他Url。但是如果我想在某些情况下将某些Url rewrite到其他应用,只考Url Rewrite就无能为力了。必须结合IIS 的另一个Extension, ARR(Application Request Routing).
ARR可以用来实现前向代理,反向代理,负载均衡等等功能,反向代理只是其很小的一个功能。我们需要做的很简单,安装后Enable就可以了。
剩下的工作就是在Url Rewrite模块中创建一个Inbound Rule:
<rule name="LocalProxyInbound" enabled="true" stopProcessing="true"> <match url="(proxy)(/testSite)(/.*)" /> <!--匹配所有proxy/testSite开头的请求--> <conditions> </conditions> <action type="Rewrite" url="http://localhost:8080{R:3}" logRewrittenUrl="true" /> <!--将匹配请求转发到localhost:8080另一个网站-->
</rule>
然后我们创建一个网站(localhost:8080),里面有一个页面index.html,输出字符串"This is from test site".
然后浏览器中访问:localhost/proxy/testSite/index.html
我们访问的地址是localhost/proxy/testSite/index.html, 通过URL Rewrite和ARR后将请求转发给了localhost:8080获取到index.html页面后返回给了浏览器。而在浏览器中看不到任何相关痕迹。这便实现了反向代理。