IIS重写规则无法按预期工作

时间:2016-02-26 20:34:16

标签: iis url-rewriting

我已经彻底研究了这个项目,在我看来,我正在做正确的事情。但是,它没有用,所以我的意见一定是错的!

我有一个网站,其中所有内容都在wwwroot或其他文件夹中。 我试图让HTML5 URL工作。 该网站提供5种URL类型。

  1. 空网址。
  2. 用于物理文件的URL,例如css,html或js文件
  3. 访问资源的URL / api / ...
  4. 用于身份验证的网址/ oauth /令牌
  5. HTML5类型网址,例如/ aboutus
  6. 我在web.config中有以下重写规则

        <rule name="index.html as document root" stopProcessing="true">
          <match url="^$" />
          <action type="Rewrite" url="/wwwroot/index.html" />
        </rule>
        <rule name="static dist files" stopProcessing="true">
          <match url="^(.+)$" />
          <conditions>
            <add input="{APPL_PHYSICAL_PATH}wwwroot\{R:1}" matchType="IsFile" />
          </conditions>
          <action type="Rewrite" url="/wwwroot/{R:1}" />
        </rule>
        <rule name="api call" stopProcessing="true">
          <match url="^/api/" />
          <action type="None"/>
        </rule>
        <rule name="authorization call" stopProcessing="true">
          <match url="^/oauth/token$" />
          <action type="None"/>
        </rule>
        <rule name="reroute html5 to index.html" stopProcessing="true">
          <match url="^.+$" />
          <action type="Rewrite" url="/wwwroot/index.html" />
        </rule>
    

    我看不出我做错了什么。我可以找到“stopProcessing”的文档是不精确的,但我认为这意味着如果规则匹配,则不再处理任何规则。

    正在发生的事情是没有正确处理对API或身份验证的调用 - 调试API没有被调用,而是似乎被重写为wwwroot / index.html。

    我确信我正在做一些非常简单的错误,但我已经尝试了所有我认为合理的事情。

    任何帮助表示感谢。

    服务器正在使用带有JWT的OWIN,而前端是AngularJS。我正在使用VS2015社区进行开发。

1 个答案:

答案 0 :(得分:1)

 <defaultDocument>
  <files>
    <clear />
    <!-- This is the root document for the Angular app -->
    <add value="wwwroot/index.html" />
  </files>
</defaultDocument>

<rewrite>
  <rules>

    <rule name="static dist files" stopProcessing="true">
      <match url="^(.+)$" />
      <conditions>
        <add input="{APPL_PHYSICAL_PATH}wwwroot\{R:1}" matchType="IsFile" />
      </conditions>
      <action type="Rewrite" url="/wwwroot/{R:1}" />
    </rule>

    <rule name="Main Rule" stopProcessing="true">
      <match url=".*" />
      <conditions logicalGrouping="MatchAll">
        <!-- Allows "api/" prefixed URLs to still hit Web API controllers 
                         as defined in WebApiConfig -->
        <add input="{REQUEST_URI}" pattern="api/" ignoreCase="true" negate="true" />
        <!-- Allow "oauth/token" to do autnentication -->
        <add input="{REQUEST_URI}" pattern="oauth/token" ignoreCase="true" negate="true"/>
      </conditions>
      <action type="Rewrite" url="/" />
    </rule>

  </rules>
</rewrite>

经过多次反复试验后,我终于开始工作了,现在我让它工作了,这一切都很明显。

defaultDocument负责原始问题中的案例1。 &#34;静态dist文件&#34;规则处理案例2。 &#34;主要规则&#34;照顾案例5确保案件3和4保持不变。