Firebase SPA 重写规则不会重定向到索引.html



我刚刚开始使用AngularJS框架在Firebase Hosting上构建单页应用程序。我已经运行了firebase init并选择将所有 url 重写为/index.html如下所示:

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

我将部分视图模板存储在以下文件夹中:

public/templates/home/dashboard.html
public/templates/courses/default.html

我的 Angular 路由工作正常,并让我的public/index.html检查授权访问,包括那些部分视图,并在用户未通过身份验证时将用户重定向到登录视图。

但是,当我尝试将模板 HTML 文件的网址直接粘贴到浏览器地址栏上时,Firebase 不会将其重定向/index.html

http://localhost:5000/templates/home/dashboard.html
http://localhost:5000/templates/courses/default.html

上述所有模板文件都加载到浏览器上,并且任何知道这些模板文件的URL的未经授权的用户都可以查看。我尝试将以下规则添加到我的firebase.json文件中,但它们都不起作用:

测试#1:

"rewrites": [
      {
        "source": "**",
        "destination": "/index.html"
      }, 
      {
        "source": "/templates/**/.*",
        "destination": "/index.html"
      }
    ]

测试#2:

"rewrites": [
      {
        "source": "**",
        "destination": "/index.html"
      }, 
      {
        "source": "/templates{,/**}",
        "destination": "/index.html"
      }
    ]

注意:我确实每次尝试都重新启动firebase serve,但我不确定缓存是否会影响这种类型的测试。我也不知道如何清除服务器缓存。

我的问题是:

  1. 编写 url 重写规则以便在直接访问这些分部视图模板时将用户重定向到/index.html的正确方法是什么?
  2. 如果无法阻止通过 Firebase 网址重写规则直接访问部分视图模板,出于安全考虑,我可以通过其他方法阻止这种情况吗?

Firebase 托管将提供静态内容,优先级高于动态重写。请参阅此托管顺序。

如果您不希望直接访问这些视图,则可以将它们移动到云功能,并设置托管以重新路由"模板"以服务于该云功能。然后,您可以配置云功能以根据需要提供/拒绝访问。

使用重定向而不是重写

"hosting": {
    "redirects": [ {
        "source": "/foo",
        "destination": "/bar",
        "type": 301
    } ]
}

将 ** 添加到以附加目标并附加其他 URL 字符串。

例如

"hosting": {
    "redirects": [ {
        "source": "/foo**",
        "destination": "/bar",
        "type": 301
    } ]
}

导致/foo?var=bar重定向到/bar?var=bar

有关详细信息,请参阅配置重定向。

相关内容

  • 没有找到相关文章

最新更新