我正在关注Angular 2路由示例。使用“精简”网络服务器,我能够从根和深层链接工作导航,但使用Apache我可以从根导航,但是当跟随链接指向路由时,会获得404 Not Found错误。
例如,以下URL对npm由端口3000启动的“lite”Web服务器起作用。
http://localhost:3000/crisis-center/2
但是在端口80上运行Apache的下一个URL失败了。
http://localhost/crisis-center/2 The requested URL /crisis-center/2 was not found on this server.
我确实尝试了一些针对类似Angular 1问题推荐的.htaccess解决方案,但没有运气。如果有人在Apache上有Angular 2路由和深层链接工作,请告诉我你是如何实现的。
@RouteConfig([ { // Crisis Center child route path: '/crisis-center/...',name: 'CrisisCenter',component: CrisisCenterComponent,useAsDefault: true },{path: '/heroes',name: 'Heroes',component: HeroListComponent},{path: '/hero/:id',name: 'HeroDetail',component: HeroDetailComponent},{path: '/disaster',name: 'Asteroid',redirectTo: ['CrisisCenter','CrisisDetail',{id:3}]} ])
Boot.ts
import {bootstrap} from 'angular2/platform/browser'; import {ROUTER_PROVIDERS} from 'angular2/router'; import {AppComponent} from './app.component'; bootstrap(AppComponent,[ROUTER_PROVIDERS]);
因为上面的答案并没有真正回答你是否想要它与Apache一起工作的问题。
HashLocationStrategy仍然是一个选项,但如果您希望它在Apache上工作,您需要执行以下操作:
在与index.html相同的位置创建一个新文件.htaccess。以下代码将在里面:
<IfModule mod_rewrite.c> Options Indexes FollowSymLinks RewriteEngine On RewriteBase /crisis-center/ RewriteRule ^index\.html$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.html [L] </IfModule>
(注意,在问题中,index.html内的< base href =“/ crises-center /”>应该与RewriteBase相同)
答案改编自Angular 2 routing and direct access to a specific route : how to configure Apache?的问答