scalajs-react Play 应用程序上漂亮的 URL(没有“#”)

Pretty URLs (without '#') on scalajs-react Play app

scalajs-react 路由器的文档中,@japgolly cautions users of the library that starting URLs with '/' slashes requires additional server configuration

为了允许没有 # 的漂亮 URL,到目前为止,我已经尝试在 Play routes 文件中编写一个包罗万象的路由,如下所示:

# Home page
GET     /          com.xyz.controllers.Application.index(path: String = "")

...
# Catch-all route
GET     /*path     com.xyz.controllers.Application.index(path: String)

Application.scala

中匹配的索引路径
def index(path: String = "") = Action {
  Ok(views.html.index("Title"))
}

最后在前端使用RouterConfigDsl声明的路由:

def create = Router(BaseUrl.until_#, RouterConfigDsl[Loc].buildConfig { dsl =>
    import dsl._

    ( emptyRule
    | staticRoute(root, DashboardLoc)                   ~> render(filler("Dashboard"))
    | staticRoute("purchase-orders", PurchaseOrdersLoc) ~> render(filler("Purchase Orders"))
    | staticRoute("dashboard", DashboardLoc)            ~> render(filler("Dashboard"))
    | staticRoute("items", ItemsLoc)                    ~> render(ItemGallery())
    | staticRoute("customers", CustomersLoc)            ~> render(filler("Customers"))
    | staticRoute("sales-orders", SalesOrdersLoc)       ~> render(filler("Sales Orders"))
    | staticRoute("preorders", PreordersLoc)            ~> render(filler("Pre-orders"))
    ).notFound(redirectToPage(DashboardLoc)(Redirect.Replace))
     .setTitle(l => s"XYZ | ${l.name}")
}.renderWith(layout))

运行 在本地,我让应用程序在 localhost:9000/dashboard 处自动重定向到 DashboardLoc,其他静态路由在网络应用程序中单击它们时有效,但在重新加载时失败。

事实证明,问题毕竟是使用 BaseUrl.until# 而不是 BaseUrl.fromWindowOrigin_/。现在所有路线都按预期工作。