Firebase URL 重写函数和目标

Firebase URL rewriting to both functions and destinations

我正在构建一个 React/Redux 应用并尝试重写一个 Firebase 函数,所有其他 URL 重写为 index.html。

现在,当我在 Chrome 浏览器上执行 "empty cache and hard reload" 时,我只能得到一个 URL 来重写函数。

这是我的 firebase.json 文件。

{
  "database": {
    "rules": "database.rules.json"
  },
  "hosting": {
    "public": "build",
    "rewrites": [
       {
         "source": "/Photos/**", "function": "getPhoto"
       },
       {
         "source": "**", "destination": "/index.html"
       }
     ]
  }
}

例如,当我转到https://nameofmyapp.firebaseapp.com/Photos/2017/October/2/12345时,我被路由到根目录(index.html),而当我期望被定向到getPhoto函数时。

我唯一能够到达“/Photos/**”重写 URL 的情况是,如果我先在浏览器中输入 https://nameofmyapp.firebaseapp.com/Photos/2017/October/2/12345 URL,然后执行Chrome 中的 "Empty Cache and Hard Reload"。这是唯一一次为我执行该功能。 (不确定这是否与 service-worker 行为有关?) 即便如此,在那个 URL 的正常刷新中,我最终又回到了 index.html .

谁能告诉我我错过了什么?

我刚刚发布了 very similar problem

的答案

您需要更改您的 "single app rewrite" :

{
  "hosting": {
    "public": "build",
    "rewrites": [
       {
         "source": "/Photos/**", "function": "getPhoto"
       },
       {
         "source": "!/Photos/**", "destination": "/index.html"
       }
     ]
  }
}

此规则不是重定向 index.html 上的所有内容(如“**”),而是重定向不在照片文件夹和子文件夹中的所有内容。