You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置Firebase Hosting重写规则将/app/*路径映射到Express云函数

问题原因

你配置source: "/app/**"的重写规则时,Firebase Hosting会将完整的请求路径(包含/app前缀)传递给关联的Express云函数。
你之前使用全局匹配**时,http://<mycustom_domain>/<api_name>的请求传递给Express的路径为/<api_name>,和你Express内定义的路由匹配所以运行正常。调整规则后,http://<mycustom_domain>/app/<api_name>传递给Express的路径变为/app/<api_name>,和现有路由不匹配,因此返回404错误。

注:Firebase Hosting的函数重写规则本身不支持路径裁剪,无法仅通过修改firebase.json实现前缀去除,需要配合调整Express侧的代码。

解决方案

以下两种方案二选一即可:

方案1:添加路径裁剪中间件(原有路由无需改动)

在Express应用的所有路由定义前,加一段中间件自动移除/app前缀后再匹配路由:

const express = require('express');
const app = express();

// 新增中间件,放在路由定义最前面
app.use((req, res, next) => {
  if (req.path.startsWith('/app/')) {
    req.url = req.url.substring(4);
  }
  next();
});

// 你原有所有路由逻辑不需要修改
app.get('/<api_name>', (req, res) => {
  // 原有业务逻辑
});

exports.app = functions.https.onRequest(app);

方案2:统一挂载路由前缀

如果你后续需要保留/app前缀的路由匹配规则,直接给所有接口统一挂载/app前缀即可:

const express = require('express');
const app = express();
const apiRouter = express.Router();

// 原有所有路由挂载到apiRouter下,路径不需要修改
apiRouter.get('/<api_name>', (req, res) => {
  // 原有业务逻辑
});

// 给所有路由统一添加/app前缀
app.use('/app', apiRouter);

exports.app = functions.https.onRequest(app);

内容的提问来源于stack exchange,提问作者rgb1380

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 15:54:03