配置 Web 应用的 URL 策略

Flutter Web 应用支持两种基于 URL 的路由的配置方式:

Hash(默认)
路径使用 # + 锚点标识符 读写,例如:flutterexample.dev/#/path/to/screen

Path
路径使用非 # 读写,例如:flutterexample.dev/path/to/screen

配置 URL 策略

#

要配置 Flutter 使用 path 策略,请使用 Flutter SDK 中 flutter_web_plugins 库提供的 usePathUrlStrategy 方法。

你不能直接使用 pub add 添加 flutter_web_plugins。请将其作为 Flutter SDK 依赖项 包含在你的 pubspec.yaml 文件中:

yaml
dependencies:
  flutter:
    sdk: flutter
  flutter_web_plugins:
    sdk: flutter

然后在 runApp 前调用 usePathUrlStrategy 函数:

dart
import 'package:flutter_web_plugins/url_strategy.dart';

void main() {
  usePathUrlStrategy();
  runApp(ExampleApp());
}

配置 web 服务器

#

PathUrlStrategy 使用的是 History API, Web 服务器需要额外进行配置才能支持相关策略。

要让 Web 服务器支持 PathUrlStrategy,你需要查阅 Web 服务器文档,重写对 index.html 的请求。更多细节请查阅 Web 服务器文档,了解如何配置单页应用程序。

如果你使用 Firebase Hosting 托管,在初始化项目时选择 "配置单页应用" 选项。更多信息请查看 Firebase 中的 配置重写

当你通过 flutter run -d chrome 创建并运行本地开发服务器时,它的默认配置会处理好所有的路径,并回退到应用程序的 index.html 文件。

将 Flutter 应用部署在子目录下

#

更新 web/index.html 中的 <base href="/"> 标签为你的应用部署路径。例如:如果你期望将 Flutter 应用部署在 my_app.dev/flutter_app,则更改此标签为 <base href="/flutter_app/">

构建支持相对路径的 base href 标签,但必须要考虑到页面完整的 URL。这意味着,对于请求 /flutter_app//flutter_app/nested/route/flutter_app/nested/route/base href 的相对路径会不同(例如,分别为 ".""..""../..")。