Firebase 托管重写不会重定向到 Google 云 运行

Firebase Hosting rewrite doesn't redirect to Google Cloud Run

我正在使用我的 firebase 主机设置重定向(重写),以便我可以从 google 云 运行 运行ning 调用 api here.

我已经尝试从 "/api/**" 更改重写字符串(应该将所有内容捕获到页面。com/api/** 并将其发送到函数)。删除 index.html 并交换到 "**" 以捕获包括索引在内的所有路径。到目前为止没有任何效果。

我的主机 firebase.json 是这样设置的,这有什么问题吗?

{
  "hosting": {
    "public": "dist/public",
    "ignore": ["firebase.json", "**.*", "**/node_modules/**"],
    "rewrites": [
      {
        "source": "**",
        "run": {
          "serviceId": "next-js-base-api",
          "region": "us-central1"
        }
      }
    ]
  }
}

我也尝试过正常重定向到另一个页面,这不起作用,什么决定了 firebase.json 设置何时开始传播和起作用?

更新

我尝试了 运行 托管模拟器并修改了重写 "source": "/api/**",结果如下。导航到 /api returns 非崩溃(不重定向),在浏览器中输出 cannot GET /api 导航到 api/wkapi(被 api 端点)returns 浏览器中的 unexpected error

Error: Unable to find a matching rewriter for {"source":"/api/**","run":{"serviceId":"next-js-base-api","region":"us-central1"}}

在控制台中。

确保通过 运行ning:

更新到最新版本的 Firebase CLI
npm install -g firebase-tools@latest

这将使您能够重写云 运行 个实例,就像您尝试做的那样。

实际上,我运行刚才,查看部署的cloud-运行 helloworld容器的日志,发现custom-domain/helloworld实际上映射到container-domain/helloworld 而不是简单地映射到容器域/。为了解决这个问题,我不得不在我原来的 Node.js 程序中添加一个额外的 app.get 规则:

app.get('/helloworld', (req, res) => {

然后调用 custom-domain/helloworld 成功了。

如果以上所有答案都不能帮助您,那么对我有用的解决方法是:

  • 查看 firebase 托管使用的项目中的 public 目录。
  • 删除 firebase 在检查时创建的 index.html 文件 firebase 初始化步骤。

删除生成的 index.html 文件后,它能够 运行 我的云 运行 容器重写。