Firebase 托管:没有尾部斜杠时重写规则失败
Firebase hosting: rewrite rule failing when there is no trailing slash
我在 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
.
我设法让它与以下配置一起工作:
{
"hosting": {
"public": "build",
"ignore": [
"firebase.json",
"**/.*",
"**/node_modules/**"
],
"rewrites": [
{
"source": "app/**",
"destination": "/app/index.html"
},
{
"source": "**",
"destination": "/index.html"
}
]
}
}
但是现在,当我去 https://example.com/app
WITHOUT SLASH 时,它服务于 "root" SPA。如果我转而使用 https://example.com/app/
WITH SLASH,它会按应有的方式为 "nested" SPA 提供服务。
如何让 https://example.com/app
服务于 "nested" SPA?
我尝试了什么
分别将 trailingSlash
设置为 true
和 false
。没变化。 (参见文档 here)
在从 https://example.com/app
到 https://example.com/app/
的配置中设置 301 重定向。该网站在我的 Chrome 和 Too many redirects
中消失了。
对我做错了什么有什么想法吗?
看起来没有办法用一个重写规则来做到这一点。
您需要添加两个重写,一个用于 app
,另一个用于 app/
。
"rewrites": [
{
"source": "/app",
"destination": "/app/index.html"
},
{
"source": "/app/**",
"destination": "/app/index.html"
},
{
"source": "**",
"destination": "/index.html"
}
]
其实是有办法的:
"rewrites": [{
"source": "/api{,/**}",
// destination | run | function
}]
我在 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
.
我设法让它与以下配置一起工作:
{
"hosting": {
"public": "build",
"ignore": [
"firebase.json",
"**/.*",
"**/node_modules/**"
],
"rewrites": [
{
"source": "app/**",
"destination": "/app/index.html"
},
{
"source": "**",
"destination": "/index.html"
}
]
}
}
但是现在,当我去 https://example.com/app
WITHOUT SLASH 时,它服务于 "root" SPA。如果我转而使用 https://example.com/app/
WITH SLASH,它会按应有的方式为 "nested" SPA 提供服务。
如何让 https://example.com/app
服务于 "nested" SPA?
我尝试了什么
分别将
trailingSlash
设置为true
和false
。没变化。 (参见文档 here)在从
https://example.com/app
到https://example.com/app/
的配置中设置 301 重定向。该网站在我的 Chrome 和Too many redirects
中消失了。
对我做错了什么有什么想法吗?
看起来没有办法用一个重写规则来做到这一点。
您需要添加两个重写,一个用于 app
,另一个用于 app/
。
"rewrites": [
{
"source": "/app",
"destination": "/app/index.html"
},
{
"source": "/app/**",
"destination": "/app/index.html"
},
{
"source": "**",
"destination": "/index.html"
}
]
其实是有办法的:
"rewrites": [{
"source": "/api{,/**}",
// destination | run | function
}]