我在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
设为true
和false
。没变。 (参见文档here)
在配置中设置301重定向从https://example.com/app
到https://example.com/app/
。该网站在我的Chrome中以Too many redirects
终止。
关于我做错的任何想法?
答案 0 :(得分:1)
使用单个重写规则看起来没有办法实现这一点。
您需要添加两个重写,一个用于app/
,另一个用于"rewrites": [
{
"source": "/app",
"destination": "/app/index.html"
},
{
"source": "/app/**",
"destination": "/app/index.html"
},
{
"source": "**",
"destination": "/index.html"
}
]
。
{{1}}