【问题标题】:URL Rewrite not working with absolute URLSURL 重写不适用于绝对 URL
【发布时间】: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


【解决方案1】:

我有过类似的撕头发的经历,我解决如下:

  1. 为 IIS 安装 Application Request Routing 扩展。
  2. 在 IIS 管理器中,打开 IIS > 应用程序请求路由缓存。转到服务器代理设置并检查启用代理

此复选框让 IIS 充当反向代理,因此我现在可以将 URL 重写为绝对 URL,而不仅仅是相对 URL。 (我的用例是让客户端请求https://foo.bar.baz/resource 并让它由https://foo.bar.baz:5678/resource 处理,其中5678 是我的防火墙阻止的端口。)

【讨论】:

    猜你喜欢
    • 2012-10-05
    • 2016-06-15
    • 2019-03-13
    • 2016-01-02
    • 1970-01-01
    • 1970-01-01
    • 2021-08-03
    • 1970-01-01
    • 2019-09-04
    相关资源
    最近更新 更多