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。
我在生产模式下重定向我的应用时遇到问题。当我有 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。