我正在使用Firebase Hosting和一个firebase.json
文件,该文件应该将所有流量转发到云功能(预渲染),该功能会填充SEO的元标记和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
时,我没有得到任何日志,它似乎在我的index.html
文件夹中呈现dist/prod
。
重写有什么我想念的吗?我尝试将/
重写为同一个函数,但没有成功。任何提示都非常赞赏!
答案 0 :(得分:16)
您应该能够以您正在显示的方式将所有网址路由到某个功能。我猜你的dist / prod目录中仍然有一个index.html文件。在我的测试项目中,我只是将根index.html重命名为其他内容,并且/
的请求被路由到我的函数。
事实证明,如果存在与客户端请求URL匹配的静态Web内容,则会提供该内容,而不是委托给该函数。对于任何传入的URL都是如此。真正确保将所有请求路由到您的函数的唯一方法是在部署之前从dist/prod
文件夹中删除所有内容。
我认为关键信息在rewrites的文档中:
仅当文件或文件夹不存在时才应用重写规则 指定的源,并返回该文件的实际内容 目的地而不是HTTP重定向。