在子目录中部署时,Angular 6路径路径不适用于直接URL

Ami*_*hah 9 angular2-routing angular

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 { }
Run Code Online (Sandbox Code Playgroud)

这些在开发环境下工作正常.如果我直接打开,localhost:4200/home那么它就会降落在预期的页面上.

但是,使用with 构建部署的那个ng build --prod --base-href=/myngapp/仅在www.domain.com/myngappwww.domain.com/myngapp/home直接打开时才起作用,然后它会给出404未找到的错误.

Ant*_*sss 13

您需要设置正确的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等等.


Rod*_*igo 5

您必须配置 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