我使用@ angular / pwa,firebase托管以及非常helpful tutorial.
创建了Ionic 4 PWA按照本教程中的所有说明进行操作(并将我的应用程序构建到“ www”文件夹中)后,我在CLI中使用“ firebase deploy”将正在工作的Ionic 4应用程序部署到this working link。
问题是:在首次访问该页面时,一切正常,没有任何缺陷。但是,当我重新加载页面或使用搜索栏访问页面时(例如,键入“ https://..link../login”),Firebase会返回404错误。
此文件不存在,并且在当前目录中找不到index.html或在根目录中找不到404.html。
在控制台中:
无法加载资源:服务器的状态为404()
我的firebase.json:
{
"hosting": {
"public": "www",
"ignore": [
"firebase.json",
"**/.*",
"**/node_modules/**"
],
"headers": [
{
"source": "/build/app/**",
"headers": [
{
"key": "Cache-Control",
"value": "public, max-age=31536000"
}
]
},
{
"source": "sw.js",
"headers": [
{
"key": "Cache-Control",
"value": "no-cache"
}
]
}
]
}
}
我的Angular路由模块:(app-routing-module.ts)
import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
const routes: Routes = [
{ path: '', loadChildren: './tabs/tabs.module#TabsPageModule' },
{ path: 'landing', loadChildren: './landing/landing.module#LandingPageModule' },
{ path: 'add-event', loadChildren: './add-event/add-event.module#AddEventPageModule' },
{ path: 'signup', loadChildren: './signup/signup.module#SignupPageModule' },
{ path: 'login', loadChildren: './login/login.module#LoginPageModule' },
{ path: 'add-profile', loadChildren: './add-profile/add-profile.module#AddProfilePageModule' }
];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule]
})
export class AppRoutingModule {}
我该怎么做才能解决此错误?
答案 0 :(得分:3)
Angular / Ionic应用程序将所有流量定向到index.html
文件,并将请求从那里路由到正确的模块/组件。当您尝试访问https://applifybyamplify.firebaseapp.com/login时,firebase正在寻找文件夹./login/index.html
,因此您得到404。
您需要在firebase.json
中使用rewrite
规则。
类似的事情应该起作用
{
"hosting": {
"public": "www",
"ignore": [
"firebase.json",
"**/.*",
"**/node_modules/**"
],
"rewrites": [
{
"source": "**",
"destination": "/index.html"
}
],
"headers": [
{
"source": "/build/app/**",
"headers": [
{
"key": "Cache-Control",
"value": "public, max-age=31536000"
}
]
},
{
"source": "sw.js",
"headers": [
{
"key": "Cache-Control",
"value": "no-cache"
}
]
}
]
}
}