用于反向代理的 IIS UrlRewrite 仅在主网站上存在文件夹时才有效

IIS UrlRewrite for reverse proxy only working if folder exists on primary website

我在同一个盒子上有两个网站,我想将一个文件夹的文件夹反向代理到另一个。如果我在父网站上创建目录,它仅适用于目录。

所以我想要 http:///site/odata/Books

去 http:///myodatasite/odata/Books

非常简单,但它不起作用,除非我转到 wwwroot/site 并在那里创建 /odata/Books 文件夹。如果我这样做,重写工作。如果我调用 /odata/Authors,它将再次返回 404,除非我创建一个 Authors 文件夹。

看来我需要在 IIS 中设置通配符映射,否则其他原因会导致重写失败。我已经尝试添加一个指向 aspnet_isapi 的通配符映射并且没有任何变化,可能是因为集成模式,但我还没有在网上找到任何对此有帮助的东西。

有谁知道为什么我的重写对目录不起作用,但重定向却可以正常工作?

<rewrite>
      <rules>
        <!-- Does Not Work unless folders exist on current site! -->
        <rule name="OdataRoutes" stopProcessing="true">
          <match url="^odata/(.*)" />
          <action type="Rewrite" url="http://myodatasite/odata/{R:1}" />
        </rule>
        <!-- Works -->
        <rule name="OdataRoutes2" stopProcessing="true">
          <match url="odata2/(.*)" />
          <action type="Redirect" url="http://myodatasite/odata/{R:1}" />
        </rule>
        <!-- Works -->
        <rule name="OdataRoutes3" stopProcessing="true">
          <match url="(.*)\.odata" />
          <action type="Rewrite" url="http://myodatasite/odata/{R:1}" />
        </rule>
</rewrite>

看起来根本不是映射。打开失败请求跟踪并监视成功请求和失败请求,目录重写似乎正在从 ARR 传递到 MvcHandler。不确定为什么没有重定向而重写了,但在看到之后,修复非常简单。

routes.IgnoreRoute("odata/{*pathInfo}");