网址重写规则不会忽略文件

时间:2016-09-23 01:34:48

标签: url-rewriting asp.net-core .net-core

http://www.iis.net/learn/extensions/url-rewrite-module/url-rewrite-module-configuration-reference

    <rule name="AngularJS Routes" stopProcessing="true">
      <match url=".*" />
      <conditions logicalGrouping="MatchAll">
        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />

      </conditions>
      <action type="Rewrite" url="/index.html" />
    </rule>

以上是针对角度单页应用广泛建议的几种网址重写规则之一。 我理解规则是指“如果请求不是针对物理文件,请将URL重写为/index.html。

摘自上述文档链接:“这可用于指定检查请求的URL是否不是文件的条件......”

在index.html中我有这个脚本参考:

<script src="lib/jquery/dist/jquery.min.js"></script>

这是一个物理文件,它确实存在于指定位置的磁盘上 重写规则正在接收此请求并将其重写为/index.html 为什么会这样? 我的web.config与wwwroot位于同一级别。

github上有几个与url重写相关的线程,不确定是否涵盖了这个特定问题: https://github.com/aspnet/BasicMiddleware/issues/43 https://github.com/aspnet/IISIntegration/issues/164 https://github.com/aspnet/IISIntegration/issues/192

1 个答案:

答案 0 :(得分:2)

IsFile无法正常工作,因为该文件不是IIS所期望的。对于Asp.Net 4应用程序,index.html文件将位于站点根目录中,但对于Asp.Net Core应用程序,该文件位于子目录中。

尝试使用新的Rewrite中间件,它知道新的Asp.Net Core布局中文件的位置。 https://github.com/aspnet/BasicMiddleware/blob/dev/samples/RewriteSample/Startup.cs#L16