我在 ASP.NET 上有一个本地网站。而且我需要将一些静态内容(从文件夹“静态”)代理到另一个网站。
我添加了这条规则:
<rule name="All in static folder" stopProcessing="true">
<match url="^static/.*" />
<action type="Rewrite" url="http://otherwebsite.com/{R:0}" appendQueryString="true" logRewrittenUrl="true" />
</rule>
但这不起作用 - 基于失败的请求日志,我的路由匹配(PATTERN_MATCH 步骤匹配“true”,然后我在 REWRITE_ACTION 和 RULE_EVALUATION_END 中看到正确的 url)但我看到 ASP.NET 在此之后继续评估其他模块等等试图自己提供内容,点击静态文件处理程序并获得 404(因为磁盘上没有这样的文件)。
我确实可以访问重写的文件(在浏览器中打开的http://otherwebSite.com/static/stylesheet.css等文件没有任何问题)。还写一些其他别名(在 etc/hosts 中)并打开http://otherwebSiteLocalAlias.com/static/stylesheet.css也可以(这意味着该网站没有一些主机/代理验证机制)。
将操作更改为“重定向”也可以,但在我的情况下这是不可接受的。
我有另一条规则将非静态资源(文件夹 url,如 /mypage/)代理到同一主机并且它可以工作。它只是不适用于静态文件 - 似乎在 url 重写完成后它的工作正常,请求继续由 asp.net 处理,这不应该是这种情况。