Firebase托管:当没有尾部斜杠时,重写规则失败

时间:2018-02-22 10:33:47

标签: firebase firebase-hosting

我在Firebase托管中托管两个SPA(单独构建)。我的构建过程生成如下目录结构:

/build
|
|-- index.html
|-- scripts.js
|-- style.css
|
|--- /app
     |
     |-- index.html
     |-- scripts.js
     |-- style.css

如果我关联我的域example.com,我希望https://example.com为第一个SPA提供服务,https://example.com/app为第二个SPA提供服务。

此外,如果文件不存在,我希望表单https://example.com/xxx的每个地址都被重写为https://example.com/index.html,同样,指向https://example.com/app/xxx的所有内容都被重写为https://example.com/app/index.html {1}}。

我设法使用以下配置:

{
  "hosting": {
    "public": "build",
    "ignore": [
      "firebase.json",
      "**/.*",
      "**/node_modules/**"
    ],
    "rewrites": [
      {
        "source": "app/**",
        "destination": "/app/index.html"
      },
      {
        "source": "**",
        "destination": "/index.html"
      }
    ]
  }
}

但现在,当我转到https://example.com/app 没有SLASH 时,它会提供“root”SPA。如果我转到https://example.com/app/ WITH SLASH ,它会按原样提供“嵌套”SPA。

如何让https://example.com/app为“嵌套”SPA提供服务?

我做了什么

  • 分别将trailingSlash设为truefalse。没变。 (参见文档here

  • 在配置中设置301重定向从https://example.com/apphttps://example.com/app/。该网站在我的Chrome中以Too many redirects终止。

关于我做错的任何想法?

1 个答案:

答案 0 :(得分:1)

使用单个重写规则看起来没有办法实现这一点。

您需要添加两个重写,一个用于app/,另一个用于"rewrites": [ { "source": "/app", "destination": "/app/index.html" }, { "source": "/app/**", "destination": "/app/index.html" }, { "source": "**", "destination": "/index.html" } ]

{{1}}