我有一个Firebase托管的单页应用程序。
我还具有3种Firebase功能(联系方式,计划,功能),应用程序和外部资源向其发出请求。
我的应用程序有一个自定义域,我想通过该域访问我的功能。
这是我当前的firebase.json
配置
{
"hosting": {
"public": "www",
"ignore": ["firebase.json", "**/.*", "**/node_modules/**"],
"rewrites": [
{
"source": "**",
"destination": "/index.html"
}
]
}
}
因此,当前所有流量都流向我的应用,并且路由是通过我的SPA处理的。目前,必须通过cloudfunctions.net
URL来访问我的函数,这并不理想。
如何为该配置添加URL重写条目,以便通过我的自定义域 访问我的功能,而我的单页应用处理其余路由?
我已经尝试过以下features
端点:
"rewrites": [
{
"source": "/features/**",
"function": "features"
},
{
"source": "!/features/**",
"destination": "/index.html"
}
]
我在函数index.js
中的位置:
...
exports.plans = functions.https.onRequest(plansApi);
exports.features = functions.https.onRequest(featuresApi);
exports.contact = functions.https.onRequest(contactApi);
但是我收到404 Cannot GET /features/123
作为答复吗?
答案 0 :(得分:2)
几件事:
featuresApi
处理程序与完整URL路径匹配(例如/features/123
而非/123
)。 Firebase Hosting会将功能的完整路径转发给功能,而不仅仅是**
部分。!/features/**
。 **
应该很好,因为如果它与/features/**
相匹配,它将已经与第一次重写并解析为该函数相符。基于错误消息,似乎(1)是这里的罪魁祸首。