Angular RouterModule - 生成构建后,url导航总是“404 Not Found”

时间:2017-10-02 19:25:41

标签: angular typescript

背景

我最近构建了我的第一个Angular 4应用程序,并使用angular-cli为Apache服务器生成生成版本,在Ubuntu终端上使用以下命令:

ng build --base-href / my-new-app / -prod

这就是因为我的服务器包含由apache托管的其他应用程序,这些应用程序位于以下地址:

http://my-server.com/my-other-app

问题

我的app-routing-module看起来像这样:

import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';

import { MyComponent } from './my-comp/my-component.component';

const routes: Routes = [
  { path: '', redirectTo: '/my-comp', pathMatch: 'full' },
  { path: 'my-comp',  component: MyComponent },
  { path: '**', redirectTo: '/my-comp', pathMatch: 'full'}];

@NgModule({
  imports: [ RouterModule.forRoot(routes) ],
  exports: [ RouterModule ]
})
export class AppRoutingModule {}

如果我通过 http://my-server.com/my-new-app 访问该应用,它会正确地重定向到 http://my-server.com/my-new-app/my-comp ,如果我使用该应用导航它会很好,但是使用 http://my-server.com/my-new-app/my-comp 在搜索栏上刷新或按Enter键的F5,将我发送到“未找到404”。

在开发上它运行正常,使用 ng serve --host 0.0.0.0 --open ,但它在 localhost:4200 / my-comp 上打开,所以我'猜测它不是真的一样。

我在生产构建中做错了什么,除了第一个路径以外的每个路径都以404错误结束了?

1 个答案:

答案 0 :(得分:1)

在root上创建一个.htaccess文件并将其粘贴到

RewriteEngine On
    # If an existing asset or directory is requested go to it as it is
    RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -f [OR]
    RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -d
    RewriteRule ^ - [L]
    # If the requested resource doesn't exist, use index.html
RewriteRule ^ /index.html

希望这有帮助。