【问题标题】:Flutter web: How can I redirect assets to other domain?Flutter web:如何将资产重定向到其他域?
【发布时间】:2021-06-07 22:53:13
【问题描述】:

我在 https://a.com/ 上部署了 Flutter Web html 文件 并设置为cdn

所以当我访问 https://a.com/# 时,它会在 https://b.com/ 上加载所有 js 文件 但资产文件仍从 https://a.com/ 加载,例如 http://a.com/assets/assets/images/sub.png

那么我怎样才能告诉颤振从 https://b.com/static/assets 找到的资产?

【问题讨论】:

    标签: flutter flutter-web


    【解决方案1】:

    您不能从您项目中没有的其他网站加载资产,资产应该在部署之前包含在您的项目文件中。

    如果您想使用来自其他网站的资源,您可以使用名为 Image.network() 的小部件,从您的其他网站传递 url 并从网络加载。

    Image.network(
     "http://a.com/assets/assets/images/sub.png"
    )
    

    【讨论】:

      【解决方案2】:

      我这样做的方式是在 AWS Amplify 上,因为我没有使用云端,所以资产被放在由 CDN 托管的不同服务器上。

      1. 确保您的主机和目标 CDN 使用相同的协议 (http/https),​​因为请求使用的是 xhr
      2. 如果您希望确保更快的加载时间,您也可以使用 preloadjs 预加载资产,并将资产列表放入 JSON 文件中。
      3. 使用 .htaccess(位于您的根文件夹中)或放大规则。

      .htaccess

      RewriteEngine ON
      RewriteRule ^assets/(.*)$ https://b.com/static/assets/$1 [R=301,L]
      

      而我的 AWS Amplify 规则是:

      [
          {
              "source": "/assets/<*>",
              "target": "https://b.com/static/assets/<*>",
              "status": "301",
              "condition": null
          }
      ]
      

      你可以通过https://htaccess.madewithlove.be/测试htaccess规则

      这可能因服务器而异(apache、nginx、AWS amplify),但它们搜索的关键字将是“将文件夹重定向到另一个域”或类似的东西。

      您不能将Image.assets 指向外部链接,因为这会破坏移动应用程序,除非您创建自己的方法然后将其分解为单独的网络 > image.network & 移动 > image.assets

      如果您无权访问服务器,就会出现这种情况。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-02-16
        • 1970-01-01
        • 2018-03-11
        • 2013-12-28
        • 1970-01-01
        • 2017-12-13
        • 1970-01-01
        相关资源
        最近更新 更多