我现在正在完成我的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路由器。
我错过了什么或者只是不可能吗?
答案 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]