首页 > 解决方案 > Flutter web:如何将资产重定向到其他域?

问题描述

我在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找到的资产?

标签: flutterflutter-web

解决方案


我这样做的方式是在 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指向外部链接,因为这会破坏移动应用程序,除非您创建自己的方法然后将其分解为单独的 web > image.network& mobile > image.assets

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


推荐阅读