这个问题在这里已有答案:
我是Angular 2的新手 . 我将我的单页应用程序存储在名为"myapp"的文件夹中 . 我已将基数中的URL更改为http://example.com/myapp/ .
我的项目有两页 . 所以我实现了Angular 2路由 . 我将默认页面设置为登录 . 当我在浏览器中输入 http://example.com/myapp/
时,它会自动重定向到 http://example.com/myapp/login
. 但如果刷新该页面我会收到 404
错误,说找不到 http://example.com/myapp/login
.
但是,如果我使用lite服务器运行我的项目,一切正常 . 在这种情况下,index.html中的URL将为 "/"
. 如何解决?
7 回答
对于使用Angular 2 rc4或更高版本的人来说,看起来LocationStrategy已经从路由器转移到了普通路由器 . 你必须从那里导入它 .
另请注意'provide'行周围的花括号 .
main.ts
对于那些真正想要
PathLocationStrategy
(即html5Mode)而不是HashLocationStrategy
的人(比如我),请参阅第三方维基中的How to: Configure your server to work with html5Mode:在这里我只复制wiki中的三个例子,以防Wiki丢失 . 通过搜索关键字"URL rewrite"(例如,适用于Firebase的this answer)可以找到其他示例 .
Apache
Documentation for rewrite module
nginx
Documentation for try_files
IIS
如果您在Visual Studio 2015中通过ASP.NET Core 1运行Angular 2,您可能会发现JürgenGutsch的此解决方案很有帮助 . 他在a blog post描述了它 . 这对我来说是最好的解决方案 . 在app.UseStaticFiles()之前,将下面提供的C#代码放在Startup.cs public void Configure()中;
我有同样的问题 . 我的Angular应用程序正在Windows服务器上运行 .
我通过在 root 目录中创建 web.config 文件解决了这个问题 .
Angular 2最终版本的更新
在app.module.ts中:
Example (app.module.ts):
替代方案
将RouterModule.forRoot与{useHash:true}参数一起使用 .
Example: (来自angular docs)
也许您可以在使用RouterModule注册根目录时执行此操作 . 您可以传递具有属性“useHash:true”的第二个对象,如下所示:
事实上,刷新应用程序时出现404错误是正常的,因为浏览器中的实际地址正在更新(并且没有#/ hashbang方法) . 默认情况下,HTML5历史记录用于在Angular2中重用 .
要修复404错误,您需要更新服务器以为您定义的每个路径路径提供
index.html
文件 .如果要切换到HashBang方法,则需要使用此配置:
在这种情况下,当您刷新页面时,它将再次显示(但您的地址中将包含
#
) .这个链接也可以帮到你:When I refresh my website I get a 404. This is with Angular2 and firebase .
希望它对你有帮助,蒂埃里