URL重写不使用绝对URLS

时间:2014-12-11 10:49:38

标签: absolute-path url-rewrite-module

我有一种情况,我想使用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之外的任何东西。

请帮忙!感谢

1 个答案:

答案 0 :(得分:3)

我有类似的发型经验,我解决了如下:

  1. 安装IIS的Application Request Routing扩展名。
  2. 在IIS管理器中,打开 IIS&gt;应用程序请求路由缓存。转到服务器代理设置,然后选中启用代理
  3. 此复选框允许IIS充当反向代理,以便我现在可以将URL重写为绝对URL而不仅仅是相对URL。 (我的用例是让客户请求https://foo.bar.baz/resource并由https://foo.bar.baz:5678/resource处理,其中5678是我的防火墙阻止的端口。)