将catch-all RewriteRule与PhysicalFileSystem

时间:2016-12-19 14:25:36

标签: asp.net web-config

我正在Angular 2后端项目的ASP.NET 4.5前端工作。在这个项目中,我已经配置了一种wwwroot(感谢this tutorial)指向我的dist文件夹。

但由于它是Angular 2项目,我还将所有内容重定向到index.html

    <rule name="AngularJS" stopProcessing="true">
      <match url="[a-zA-Z]*" />
      <conditions logicalGrouping="MatchAll">
        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
        <add input="{REQUEST_URI}" pattern="^/(api)" negate="true" />
        <add input="{REQUEST_URI}" pattern="^/oauth" negate="true" />
      </conditions>
      <action type="Rewrite" url="/" />
    </rule>

现在我的问题是,由于我添加了PhysicalFileSystem,我无法再检索我的bundle文件。我请求main.bundle.js(位于dist/main.bundle.js),这应该通过文件系统正确检索,但不幸的是,它被RewriteRule抓住它只是渲染我index.html页面。

如何确定优先级?

TL; DR 将所有内容重定向到index.html,但在dist下也有一个逻辑根文件夹。希望我的服务器从dist检索所有内容,但它属于RewriteRule,因为它实际上并不存在。

1 个答案:

答案 0 :(得分:0)

对于那些我们遇到同样问题的人来说,问题只是因为这些文件实际上并不存在,每个请求都被重定向到index.html

为了解决这个小问题,我只是在我的RewriteRule中添加了一个小例外来处理对静态文件的请求,这现在使我的系统工作了!

<add input="{REQUEST_URI}" pattern="^.*\.(jpg|css|js|gif|png|eot|ttf|woff)$" negate="true" />