如何删除 .html URL 结尾并在 Firebase 中配置重定向?

How to remove .html URL endings and configure redirects in Firebase?

编辑:修复了我在 HTML 中将 about.html 称为 /about/ 但我仍然遇到同样问题的错误。


我知道这是一个重复的问题,之前已经问过很多次,但其他人的解决方案对我不起作用。我想做的是重新路由,例如,index.html/index/about.html/about/.

我尝试使用@louisvno的回答, @michael-bleigh's answer , and @HarsH's answer here,都是在.json文件中添加以下内容:

"hosting": {
    "cleanUrls": true
  }

(这也是 Firebase 的配置托管行为指南的“Control .html extensions”部分的答案。)

但是,这没有效果。在我的 HTML 文件中,我尝试将 <a> 标签设置为 href="index.htmlhref="/index/href="/index",但是这些选项中的 none 有效并且我不确定是否有必要从原来的 <a href="index.html"> 更改它。 (是吗?)

我尝试的另一个解决方案是使用 "redirects" 属性,正如 @ken-mueller here 所建议的。我删除了 "clearUrls" 位并将以下内容放入我的 .json 文件中:

  "hosting": {
    "redirects": [ {
      "source": "index.html",
      "destination": "/index",
      "type": 301
    }, {
      "source": "index.html{,/**}",
      "destination": "/index",
      "type": 3011
    }, {
      "source": "about.html",
      "destination": "/calculator",
      "type": 301
    }, {
      "source": "about.html{,/**}",
      "destination": "/solutions",
      "type": 301
    } ]
  }

(这也是 Firebase Configure redirects section 的配置托管行为指南)

的答案

这也没有效果。而且,即使将我的 HTML 从 <a href="about.html"> 更改为 <a href="/about/"><a href="/about">,它也只会破坏 about.html 页面并显示 index.html 页面.

我做错了什么?如何从 URL 的末尾删除 .html 并确保每次在 URL 中输入它时,它都会重定向到 URL 而没有结尾(即 /index/ 而不是 /index.html?

感谢 Firebase 支持人员的 Mau,最终解决了这个问题。 "cleanUrls" 工作正常,我只需要一个左括号和右括号 (duh)。对于我的 post 中的代码,我还注意到其中一个重定向将 "type": 设置为 3011 而不是 301。无论哪种方式,最终代码是:

{
  "hosting": {
    "cleanUrls": true,
    "trailingSlash": true
  }
}