我正在尝试将两个服务器变量作为 URL 重写条件的一部分进行比较。但首先,一些背景...
在 IIS 中,如果您请求http://www.example.com/foo并且foo是一个目录,则 IIS 会将 302“移动对象”重定向http://www.example.com/foo/作为“礼貌重定向”(Source)发送到。
如果您使用 IIS+ARR 作为具有 SSL 卸载的反向代理,后端 IIS 节点接收的请求是通过 http 而不是 https。
结合这两种行为,IIS 的礼貌重定向会丢弃 SSL。礼貌重定向使用与 IIS 收到的请求(源)相同的方案,在这种情况下是 http 而不是 https。
我想创建一个出站重写规则,将传入 URL 与传出 Location 标头进行比较,并在这种情况下将其从 http 重写为 https:
{RESPONSE_STATUS}是 302{HTTPS}is "on"以上都是在前提条件下处理的。棘手的部分是最后一点:
下面是我到目前为止的代码。前提条件和标头重写都可以正常工作。但是,该条件会导致 500 错误(URL 重写模块错误),大概是因为我{REQUEST_URI}在模式中使用。我尝试将条件分成两个并使用捕获组,但这也不起作用。有任何想法吗?
<rule name="Fix: Courtesy Redirect + SSL Offloading = …Run Code Online (Sandbox Code Playgroud)