用于反向代理的 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}");
我在同一个盒子上有两个网站,我想将一个文件夹的文件夹反向代理到另一个。如果我在父网站上创建目录,它仅适用于目录。
所以我想要 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}");