我有一种情况,我想使用IIS 8 URL Rewrite将服务请求从一个Web应用程序指向另一个Web应用程序。这些服务由iPhone应用程序调用,并在其代码中进行硬编码,因此由于遗留原因,URL www.myownsite.com/iPhone/myService.asmx 必须提供该服务。 然而,主要的www网站正在变得越来越复杂的Web应用程序,部署费力(它实际上是Telerik Sitefinity网站),因此为了便于部署服务错误修复,我想将它们移动到单独的网站 - 名为 services.myownsite.com 。未来的应用程序将直接引用它,但我仍然需要满足需要www地址的旧版本。
这两个站点位于同一个iis服务器上并共享一个ip但具有不同的主机头。直接通过URL
调用时,该服务正常工作services.myownsite.com/iPhone/myService.asmx
我的愿望是使用URL Rewrite指向www。对服务的要求。等效。
这就是问题 - 我可以让URL重写工作,但只有当重写的URL是相对URL时。我无法重写为包含http://
的内容这是相当恼人的,因为我在这篇msdn博客文章中严格遵循这些说明,建议这样的方法没问题http://blogs.msdn.com/b/carlosag/archive/2010/04/02/setting-up-a-reverse-proxy-using-iis-url-rewrite-and-arr.aspx
这是我的意思的一个例子 - 我尝试了一些更简单的东西,看看它是如何工作的。 下面的代码成功地将URL重写为同一站点中的另一个相对URL,在本例中是另一个服务
<rule name="Authentication Service" stopProcessing="true">
<match url="iPhone/(.*)" />
<action type="Rewrite" url="/secure/services/anotherservice.asmx" logRewrittenUrl="true" />
</rule>
但是,如果我尝试使用绝对URL - 能够将URL更改为另一个站点的第一步 - 它会失败。以下示例
<rule name="Authentication Service" stopProcessing="true">
<match url="iPhone/(.*)" />
<action type="Rewrite" url="http://www.myownsite.com/secure/services/anotherservice.asmx" logRewrittenUrl="true" />
</rule>
我真正喜欢的是让URL属性使用像
这样的值http://services.myownsite.com/secure/services/anotherservice.asmx.
我可以愉快地使用正则表达式返回引用来构建重写URL,我只是撕掉我的头发,为什么我不能在重写中使用除相对URL之外的任何东西。
请帮忙!感谢
答案 0 :(得分:3)
我有类似的发型经验,我解决了如下:
此复选框允许IIS充当反向代理,以便我现在可以将URL重写为绝对URL而不仅仅是相对URL。 (我的用例是让客户请求https://foo.bar.baz/resource
并由https://foo.bar.baz:5678/resource
处理,其中5678
是我的防火墙阻止的端口。)