将Firebase托管根目录重定向到云功能不起作用

And*_*pon 8 javascript express firebase firebase-hosting google-cloud-functions

我正在使用Firebase Hosting,该firebase.json文件应该将所有流量转发到云功能(prerender),该功能会填充SEO的元标记和og标记.

{
  "hosting": {
      "public": "dist/prod",
      "rewrites": [
       {
          "source": "**",
          "function": "prerender"
       }
      ]
   }
}
Run Code Online (Sandbox Code Playgroud)

我的prerender功能是处理请求并呈现HTML文件.这很好用:

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

点击结束点时https://xxx.cloudfunctions.net/prerender,我正确地在功能 - >日志下的Firebase仪表板中接听电话:

prerender function: "null"
Run Code Online (Sandbox Code Playgroud)

但是,在调用时https://mypage.firebaseapp.com,我没有得到任何日志,它似乎渲染了index.html我的dist/prod文件夹的内部.

重写有什么我想念的吗?我尝试重写/相同的功能,但没有成功.任何提示非常感谢!

Dou*_*son 21

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

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

我相信关键信息是在重写文档中:

仅当指定源中不存在文件或文件夹时才应用重写规则,并返回目标文件的实际内容而不是HTTP重定向.