Angular 路由 - 重定向 url 到组件

Angular routing - redirect url to component

我在生产模式下重定向我的应用时遇到问题。当我有 url http://server.com/projectname/dashboard 时,服务器响应 IIS 错误页面 404。我必须使用 http://server.com/projectname 打开应用程序,然后单击 link 例如:

<a [routerLink]="'dashboard'">Dashboard</a>

在 html 我有 <base href="./"> 这是我的路由器:

const appRoutes: Routes = [
    { path: '', redirectTo: 'dashboard', pathMatch: 'full', canActivate: [AuthGuard] },
    { path: 'dashboard', component: DashboardComponent, canActivate: [AuthGuard]},
    { path: '400', component: ErrorComponent, canActivate: [AuthGuard] },
    { path: '401', component: ErrorComponent, canActivate: [AuthGuard] },
    { path: '404', component: ErrorComponent, canActivate: [AuthGuard], 
    { path: '**', redirectTo: '/404' }
]

@NgModule({
    imports: [
        RouterModule.forRoot(appRoutes)
    ]
})

在开发模式下我有 url http://localhost:4200/dashboard 我应该重定向。在开发中是 url localhost:4200/dashboard 并且在生产中是 server.com/appname/dashboard 时会出现问题吗?

在生产环境中部署时,在 index.html 中添加此行:

<base href="/appname/">

您需要更新应用程序的基本 href。如果您使用 angular-cli,我不会推荐@Daniel 的回答,因为有一种更简单的方法。

使用 angular-cli,您可以使用:ng build --prod --bh /appname/,这将更新生产构建基础 href。这是一种更好的方法,因为您不必在 index.html 环境之间切换时手动更新它。

我找到了原因。我必须配置回退。 Here 是关于它的文章。

我必须添加 web.config:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
   <rewrite>
    <rules>
      <rule name="Angular Routes" stopProcessing="true">
        <match url=".*" />
        <conditions logicalGrouping="MatchAll">
          <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
          <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true"/>
        </conditions>
        <action type="Rewrite" url="./" />
      </rule>
    </rules>
  </rewrite>
  </system.webServer>
</configuration>

现在它可以正常工作了,我可以打开任意应用程序 url。