<?xml version="1.0" encoding="utf-8"?>
<!--
  IIS 站点级 web.config 示例：在「同一站点、80/443」上同时承载
  - /board   → Board ASP.NET Core（建议作为该站点下的「应用程序」物理路径指向发布目录，不由本文件反代）
  - 其它路径 → 反向代理到本机 DataEase（如 http://127.0.0.1:8100）

  使用前请安装：
  - URL Rewrite 模块
  - Application Request Routing（ARR），并在服务器节点启用 Proxy

  重要说明：
  - nginx 的 auth_request（子请求鉴权）在 IIS 中没有一行等价的内置指令。
  - 本示例仅覆盖「路径分流 + 反代 DataEase + 转发头」。
  - 若必须保留「访问 / 任意路径前必须先通过 /board/check/」的行为，见仓库说明或单独网关方案。
-->
<configuration>
  <system.webServer>
    <!-- 若反代路径含编码字符，按需开启 -->
    <!--
    <security>
      <requestFiltering allowDoubleEscaping="true" />
    </security>
    -->

    <rewrite>
      <allowedServerVariables>
        <!-- 需在 URL Rewrite「查看允许的服务器变量」中允许下列变量（或在 IIS 管理器中逐个添加） -->
        <add name="HTTP_X_FORWARDED_HOST" />
        <add name="HTTP_X_FORWARDED_FOR" />
        <add name="HTTP_X_FORWARDED_PROTO" />
        <add name="HTTP_X_ORIGINAL_URI" />
      </allowedServerVariables>

      <rules>
        <!-- 1) /board 及其子路径：交给本站点下的 /board 应用程序处理（不要用反代覆盖） -->
        <rule name="Board_App_SkipProxy" stopProcessing="true">
          <match url=".*" />
          <conditions logicalGrouping="MatchAll">
            <add input="{REQUEST_URI}" pattern="^/board(/|$)" />
          </conditions>
          <action type="None" />
        </rule>

        <!-- 2) 其余请求：反代到 DataEase -->
        <rule name="ReverseProxy_DataEase" stopProcessing="true">
          <match url="(.*)" />
          <conditions logicalGrouping="MatchAll">
            <add input="{REQUEST_URI}" pattern="^/board(/|$)" negate="true" />
          </conditions>
          <serverVariables>
            <set name="HTTP_X_FORWARDED_HOST" value="{HTTP_HOST}" />
            <set name="HTTP_X_FORWARDED_FOR" value="{REMOTE_ADDR}" />
            <!-- HTTPS 站点请改为 https；纯 HTTP 保持 http -->
            <set name="HTTP_X_FORWARDED_PROTO" value="http" />
            <set name="HTTP_X_ORIGINAL_URI" value="{REQUEST_URI}" />
          </serverVariables>
          <action type="Rewrite" url="http://127.0.0.1:8100/{R:1}" />
          <appendQueryString>true</appendQueryString>
        </rule>
      </rules>

      <!-- 可选：把 DataEase 响应里指向 8100 的 Location 改回当前站点（按实际 Location 形态调整） -->
      <!--
      <outboundRules>
        <rule name="Strip8100FromLocation" preCondition="IsRedirect">
          <match serverVariable="RESPONSE_Location" pattern="^http://127\.0\.0\.1:8100/(.*)" />
          <action type="Rewrite" value="https://{HTTP_HOST}/{R:1}" />
        </rule>
        <preConditions>
          <preCondition name="IsRedirect">
            <add input="{RESPONSE_STATUS}" pattern="^30[12]$" />
          </preCondition>
        </preConditions>
      </outboundRules>
      -->
    </rewrite>

    <!-- 反代时建议保留原始 Host，避免上游生成错误绝对 URL（在 ARR 服务器代理设置里也可勾选） -->
    <proxy preserveHostHeader="true" reverseRewriteHostInResponseHeaders="true" />
  </system.webServer>
</configuration>
