【发布时间】:2014-12-11 10:49:38
【问题描述】:
我有一种情况,我想使用 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 重写来指向 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 之外的任何东西。
请帮忙!谢谢
【问题讨论】:
-
个人 - 我会尝试在 IIS 中使用 301 重定向更简单。 URL 重写通常用于制作友好的 url 并将外部映射到内部。不移动网站,应该通过 301 重定向来更新搜索引擎引用。
-
301 重定向在这里不起作用,因为调用它的 iPhone 应用程序不够智能,无法识别重定向并相应地更改其调用
-
不管 Andy R 的方法好不好,我仍然有兴趣了解如何使用 IIS 重写模块来创建基于包含绝对 URL 作为目标的重写映射的规则。我刚刚得到 HTTP 500。
-
您在这里找到解决方案了吗?我也有同样的问题...
标签: absolute-path url-rewrite-module