将 Firebase 托管根目录重定向到 Cloud Functions 不起作用

Redirect Firebase Hosting root to a Cloud Function is not working

我将 Firebase 托管与 firebase.json 文件一起使用,该文件应该将所有流量转发到云功能(prerender),该功能会为 SEO 填充 meta 和 og 标签。

{
  "hosting": {
      "public": "dist/prod",
      "rewrites": [
       {
          "source": "**",
          "function": "prerender"
       }
      ]
   }
}

我的 prerender 函数正在处理请求并呈现 HTML 文件。这很好用:

export const prerender = functions.https.onRequest((req, res) => {
   console.log('prerender function: "' + req.path + '"');
   ...
}

当在 https://xxx.cloudfunctions.net/prerender 到达终点时,我在功能 -> 日志下的 Firebase 仪表板中正确地收到了调用:

prerender function: "null"

但是,当调用 https://mypage.firebaseapp.com 时,我没有得到任何日志,它似乎在我的 dist/prod 文件夹中呈现 index.html

重写后我遗漏了什么吗?我尝试将 / 重写为相同的函数,但没有成功。非常感谢任何提示!

您应该能够按照您显示的方式将所有 URL 路由到一个函数。我猜您的 dist/prod 目录中仍然有一个 index.html 文件。在我的测试项目中,我只是将根 index.html 重命名为其他内容,并且对 / 的请求被路由到我的函数。

事实证明,如果存在与客户端请求匹配的静态 Web 内容 URL,将提供该内容而不是委托给该函数。 这是事实对于任何传入 URL。真正确保 all 请求路由到您的函数的唯一方法是在部署之前从 dist/prod 文件夹中删除 all 内容。

我认为关键信息在 rewrites 的文档中:

A rewrite rule is only applied if a file or folder does not exist at the specified source, and returns the actual content of the file at the destination instead of an HTTP redirect.