场景:一个 Web 服务器在两个不同的地址下运行单个站点:
- www.mysite.com (常规网站)
- ws1.mysite.com (网络服务)
两者都可以通过 HTTPS 访问,并且都在同一应用程序上运行(无论是 Web 服务调用还是常规 www 调用都以编程方式处理)。
我在 www 网站上有一个网页,它通过 Javascript 调用 ws1 网站上的 Web 服务。从技术上讲,这是一个 CORS 调用。但是,为了向后兼容,我希望使调用非 CORS。最好的方法是制定 URL 重写规则,将自定义地址(例如 www.mysite.com/ws1/)分叉到 Web 服务位置(ws1.mysite.com),这样浏览器就不会知道这是 CORS(因为归根结底,它并不是真正的“跨源”)。
因此,我在网站上制定了以下规则:
<rewrite>
<rules>
<remove name="WS1-Inbound" />
<rule name="WS1-Inbound" enabled="false">
<match url="^ws1/(.*)" />
<conditions />
<serverVariables />
<action type="Rewrite" url="https://ws1-mysite.com/{R:1}" logRewrittenUrl="true" />
</rule>
</rules>
<outboundRules>
<remove name="WS1-Outbound" />
<rule name="WS1-Outbound" enabled="false">
<match filterByTags="None" pattern="^https://ws1-mysite.com/(.*)" />
<conditions />
<action type="Rewrite" value="ws1/{R:1}" />
</rule>
</outboundRules>
</rewrite>
这返回 404.4。啊,所以我打开 ARR,现在我得到了 502.3。
入站规则已成功应用,但永远不会到达出站规则。
我是否:
- 在这种情况下需要打开 ARR 吗?
- 需要以某种特殊方式处理 SSL?我只需要它通过。
答案1
在这种情况下,IIS 中配置的 HTTP 重定向指令会产生干扰。
编辑:
在 IIS 管理器的网站节点上,我配置了 HTTP 重定向。选中了“将请求重定向到此目标”复选框,其中“https://www.thisismysite.com“(减去“这是”。感谢格式化......)作为地址。下面的“重定向行为”下,“将所有请求重定向到精确目的地(而不是相对于目的地)。”选择的状态代码为“找到(302)”。
我取消了“将请求重定向到此目标”的勾选。我仍在尝试弄清楚这究竟是如何解决问题的。