如何将Firebase Hosting的API路由重定向到外部带端口的URL
问题原因
你遇到的/api/前缀请求直接返回index.html的问题,核心是两个配置问题:
- 现有重定向规则没有正确捕获并传递
/api/之后的路径片段,就算触发重定向也无法把后续路径和参数传递到目标地址 - 旧版部署的配置缓存也可能导致重定向规则未被触发,直接走了全局重写规则返回SPA入口文件
修正方案
修改firebase.json中的redirects规则,使用通配符捕获/api/后的路径片段,Firebase会默认保留原有查询参数无需额外配置:
{ "hosting": { "public": "dist/public", "ignore": [ "firebase.json", "**/.*", "**/node_modules/**" ], "redirects": [ { "source": "/api/**", "destination": "http://<domain>:<port>/$1", "type": 302 } ], "rewrites": [ { "source": "**", "destination": "/index.html" } ] } }
配置说明
source中的**会匹配/api/之后的所有路径,捕获到的内容可以通过$1在目标地址中引用- Firebase Hosting执行规则的优先级为:静态文件匹配 > 重定向规则 > 重写规则,只要重定向规则匹配成功就不会走到全局重写返回
index.html的逻辑 - 无需额外处理查询参数,Firebase会自动将原请求的查询参数追加到重定向目标地址
验证步骤
部署完成后优先清理浏览器缓存,或者用无痕模式、curl命令直接测试避免缓存干扰:curl -I https://<domain>.web.app/api/v1/db/search?query=test
正常返回结果会包含响应头Location: http://<domain>:<port>/v1/db/search?query=test,代表重定向配置生效。
内容的提问来源于stack exchange,提问作者KwongTN
相关产品推荐
相关产品推荐

