ASP.NET使用重写规则将非现有页面重定向到web.config中的主页

时间:2014-08-12 18:41:10

标签: asp.net angularjs url-rewriting

在我的ASP.NET SPA应用程序中,我使用web.config来设置重写规则,因此我可以无错误地刷新页面(使用Angularjs时),但我也想重定向到应用程序的主页,手动输入不存在的页面,请告知我应该如何修改以下代码以适应这个:

<rewrite>
    <rules>
      <rule name="Products" stopProcessing="true">
        <match url="^products" />
        <action type="Rewrite" url="/" />
      </rule>
      <rule name="Orders" stopProcessing="true">
        <match url="^orders" />
        <action type="Rewrite" url="/" />
      </rule>
      <rule name="Home" stopProcessing="true">
        <match url="^home" />
        <action type="Rewrite" url="/" />
      </rule>
      <rule name="List" stopProcessing="true">
        <match url="^list" />
        <action type="Rewrite" url="/" />
      </rule>
    </rules>
  </rewrite>

2 个答案:

答案 0 :(得分:1)

正如Fedaykin所建议的(非常感谢),以下代码解决了这个问题:

<system.webServer>
    <httpErrors errorMode="Custom">
       <remove statusCode="404"/>
       <error statusCode="404" path="/Default.aspx" responseMode="ExecuteURL"/>
    </httpErrors>
</system.webServer>

由于我在单页应用程序上工作,在我的情况下,路径将等于&#34; /&#34;,如下所示:

<error statusCode="404" path="/" responseMode="ExecuteURL"/>

然后Angularjs路由将负责其余部分。

答案 1 :(得分:0)

您可以使用404错误处理重定向到您的主页(此处我假设是Default.aspx,但将其更改为您的主页),在您的webconfig文件中:

<configuration>

   <system.web>
      <compilation targetFramework="4.0" />

      <customErrors mode="On" redirectMode="ResponseRewrite">
         <error statusCode="404" redirect="Default.aspx" />
      </customErrors>
   </system.web>

   <system.webServer>
      <httpErrors errorMode="Custom">
         <remove statusCode="404"/>
         <error statusCode="404" path="/Default.aspx" responseMode="ExecuteURL"/>
      </httpErrors>
   </system.webServer>

</configuration>

此外,在您的角度配置上,使用以下内容重定向到主页:

$routeProvider.
   when('/',{'templateUrl' : 'a.html'})
  .when('/b',{'templateUrl' : 'b.html'})
  .otherwise({redirectTo : '/'})
}

希望有所帮助。