如何通过重写部署的应用程序中的URL使Angular 2路由器工作?

时间:2016-09-22 21:33:27

标签: angular angular2-routing

我现在正在完成我的Angular 2应用程序,我想知道如何托管它。

我刚尝试在我的localhost上构建应用程序,实际上一切似乎都运行正常,期待应用程序的Router。我无法通过重写URL来访问路由,因为它可能正在寻找一些文件和.htaccess RewriteRules,而不是routes。能够通过重写URL来访问路由对我来说很重要,因为我不希望我的管理面板有[routerLink]个,而其他一些东西要公开(被视为超链接)。

更具体...... 当我访问http://localhost/FinalApp/时,它使用路由器将我导航到http://localhost/FinalApp/list/page/1,以便Angular 2路由器添加list/page/1。所有[routerLink]都正常工作,并导航我到例如。 http://localhost/FinalAll/list/category/3当我点击它们时,但是当我手动重写URL以进入管理面板时(我将admin添加到我的基座http://localhost/FinalApp/,所以最终的网址看起来像http://localhost/FinalApp/admin)它显示404错误(不是路由器的默认路由,而是服务器端404)。

我希望能够手动重写URL并使用Angular 2路由器。

我错过了什么或者只是不可能吗?

2 个答案:

答案 0 :(得分:5)

通过实施HashLocationStrategy向您的所有路线添加#来解决此问题:http://localhost/FinalApp/list/page/1变为http://localhost/#/FinalApp/list/page/1。您可以通过向HashLocationStrategy提供商添加AppModule来实现此目标:

{ provide: LocationStrategy, useClass: HashLocationStrategy }

您需要从LocationStrategy

导入HashLocationStrategy@angular/common
import { LocationStrategy, HashLocationStrategy } from '@angular/common';

如果您使用的是RC4或更低版本,请将其添加到bootstrap方法:

bootstrap(
AppComponent,
    [
        { provide: LocationStrategy, useClass: HashLocationStrategy }
    ]);

答案 1 :(得分:0)

正如您所说,这是由于服务器端路由。使用链接href,浏览器向托管应用程序的服务器发出请求。如果您尚未将Web服务器设置为将所需路径路由到单页应用程序,则会在系统中查找存储在http://localhost/FinalApp/admin的服务器上的内容。如果您使用网址重写来维护浏览器中的网址,但是为应用程序提供服务,应用程序将在加载后执行所有路由。这是一个微不足道的未经考验的例子:

使用apache重写的示例

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(/.*)$ /index.html [L]