Angular项目部署谷歌云后刷新页面出现404错误 仅GCP环境触发
问题根因
这是单页应用(SPA)部署在静态服务器上的典型问题:Angular 采用客户端路由方案,所有路由跳转逻辑都在首次加载的 index.html 内运行。手动刷新 /results 页面时,浏览器会直接向 GCP App Engine 发起 /results 路径的资源请求,你当前的 app.yaml 仅配置了根路径的规则,App Engine 找不到对应路径的静态资源就会返回 404。
本地环境、AWS 平台运行正常是因为这两个环境的 Web 服务默认开启了 SPA 路由回退配置,所有未匹配到静态资源的请求都会返回 index.html,交给前端处理路由逻辑。
解决方案
修改 app.yaml 的 handlers 规则,新增全路径回退到 index.html 的配置即可,修改后的完整配置如下:
runtime: python27 api_version: 1 threadsafe: true handlers: # 匹配所有静态资源请求,直接返回对应静态文件 - url: /(.*\.(js|css|png|jpg|gif|ico|svg|json|txt|woff|woff2|ttf|eot))$ static_files: skote/\1 upload: skote/.*\.(js|css|png|jpg|gif|ico|svg|json|txt|woff|woff2|ttf|eot)$ # 根路径请求返回首页 - url: /$ static_files: skote/index.html upload: skote/index.html # 所有未匹配到静态资源的请求,全部返回index.html,交给Angular处理前端路由 - url: /.* static_files: skote/index.html upload: skote/index.html
配置生效后,刷新 /results 页面时 App Engine 会返回 index.html,Angular 加载完成后会自动匹配前端路由渲染结果页,不会再出现404问题。
额外注意
- 如果项目有其他后缀的静态资源需要访问,将后缀补充到第一条规则的后缀列表中即可
- Python 2.7 runtime 已经停止官方维护,有条件的话建议升级到 Python 3 版本的 runtime,路由配置逻辑完全一致,只需修改 runtime 字段即可
内容的提问来源于stack exchange,提问作者gsalgueiros
相关产品推荐
相关产品推荐

