app.routing.module.ts
import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { HomeComponent } from './public/home/home.component';
const routes: Routes = [
{
path: 'customers',
loadChildren: '../app/customers/customers.module#CustomersModule'
},
{
path: 'admin',
loadChildren: '../app/admin/admin.module#AdminModule'
},
{
path: 'home',
component: HomeComponent
},
{
path: '**',
redirectTo: 'home',
}
];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule]
})
export class AppRoutingModule { }
这些在开发环境下工作正常。如果我直接打开localhost:4200/home
,那么它就会降落在预期的页面上。
但是,使用ng build --prod --base-href=/myngapp/
构建和部署的那个只能在www.domain.com/myngapp
上工作,如果我直接打开www.domain.com/myngapp/home
,那么它会给404找不到错误。
您需要设置正确的URL重写规则。 Angular docs解释了如何为大多数流行的http服务器执行此操作。你可以在这里找到细节。
https://angular.io/guide/deployment#production-servers
它的作用就是简单地说,无论请求的路径是什么,都要告诉服务器始终提供index.html。例如。
www.domain.com/myngapp/home
- >服务index.html,而不是home.html或类似的www.domain.com/myngapp/some/child/routing
- >服务index.html并且不要试图找到一些/ child / routing.html或php等等。
您必须配置HTTP服务器(apache,Nginx或其他)以将以www.domain.com/myngapp/**开头的所有URI重定向到index.html文件。
请注意,当通过与按钮和菜单的交互访问“Angular内部”时,应用程序的路由(https://angular6demoamit.000webhostapp.com/)可以正常工作。但是,当您尝试访问在浏览器上直接键入它的路由时,服务器不知道URI https://angular6demoamit.000webhostapp.com/home是Angular应用程序的路由。它可能会尝试加载不存在的主目录的索引页。
没有一种配置可以解决您的问题。它取决于您的HTTP服务器和基础架构。阅读angular指南,它描述了某些HTTP服务器的一些配置示例:https://angular.io/guide/deployment#routed-apps-must-fallback-to-indexhtml。
如果您将文件复制到服务器子文件夹中,请附加构建标志--base-href,如果您在服务器/myngapp/index.html上有index.html文件,则添加命令with build --base-href = / myngapp / else复制所有dist文件并粘贴在没有base-href的服务器上。
尝试使用:
const routes: Routes = [
{
path: 'customers',
loadChildren: '../app/customers/customers.module#CustomersModule'
},
{
path: 'admin',
loadChildren: '../app/admin/admin.module#AdminModule'
},
{
path: 'home',
component: HomeComponent
},
{
path: '**',
redirectTo: 'home',
}
];
imports:
RouterModule.forRoot(routes, {useHash: true})