Angular 默认使用 HTML5 推送状态(Angular 俚语中的PathLocationStrategy)。
您要么需要一个服务器来处理所有请求,就像它请求 index.html 一样,要么切换到 HashLocationStrategy(在路由的 URL 中带有 #)https://angular.io/docs/ts/latest/api/common/index/HashLocationStrategy-class.html
另见https://ngmilk.rocks/2015/03/09/angularjs-html5-mode-or-pretty-urls-on-apache-using-htaccess/
要切换到HashLocationStrategy,请使用
更新 >= RC.5 和 2.0.0 最终版
import {HashLocationStrategy, LocationStrategy} from '@angular/common';
@NgModule({
declarations: [AppCmp],
bootstrap: [AppCmp],
imports: [BrowserModule, routes],
providers: [{provide: LocationStrategy, useClass: HashLocationStrategy}]
]);
useHash 或更短
imports: [RouterModule.forRoot(ROUTER_CONFIG, {useHash: true}), ...
确保您拥有所有必需的导入
对于新的(RC.3)路由器
<base href=".">
也可能导致 404。
需要
<base href="/">
更新 >= RC.x
bootstrap(AppCmp, [
ROUTER_PROVIDERS,
provide(LocationStrategy, {useClass: HashLocationStrategy})
// or since RC.2
{provide: LocationStrategy, useClass: HashLocationStrategy}
]);
import {provide} from '@angular/core';
import {
PlatformLocation,
Location,
LocationStrategy,
HashLocationStrategy,
PathLocationStrategy,
APP_BASE_HREF}
from '@angular/common';
更新为 >= beta.16 导入已更改
import {BrowserPlatformLocation} from '@angular/platform-browser';
import {provide} from 'angular2/core';
import {
// PlatformLocation,
// Location,
LocationStrategy,
HashLocationStrategy,
// PathLocationStrategy,
APP_BASE_HREF}
from 'angular2/router';
import {BrowserPlatformLocation} from 'angular2/src/router/location/browser_platform_location';
import {provide} from 'angular2/core';
import {
HashLocationStrategy
LocationStrategy,
ROUTER_PROVIDERS,
} from 'angular2/router';
另见https://github.com/angular/angular/blob/master/CHANGELOG.md#200-beta16-2016-04-26break-changes