gpt4 book ai didi

java - 如何在 Play Framework 中重新创建 nginx 的 try_files 以托管 React 站点

转载 作者:行者123 更新时间:2023-12-02 12:03:19 25 4
gpt4 key购买 nike

我正在尝试从 Play Framework 服务器托管 React 站点。 React 前端是在单独的项目中开发的,其构建工件(静态 html/js/css/等文件)被复制到我的 Play 项目的 public 文件夹中。

现在我尝试导航到例如/page1(这是一个 React 路由),但是我得到了 404,因为服务器当然没有这样的路由。

我想要的是复制 nginx 的 try_files $uri/index.html 类型的功能 - 如果可以提供所请求的路径(即它对应于服务器知道的 Assets ) ,已送达。否则,在不重写 url 的情况下提供 index.html 的内容,以便 React 的路由可以工作。

我尝试让它仅与 routes 文件一起使用,也可以作为 Controller (带有 if/else)。我无法准确复制 nginx 中的单行代码。我怎样才能做到这一点?

最佳答案

正如 @vdebergue 所说,您可以通过在 conf/routes 文件的底部添加一个包罗万象的内容来获得所需内容的简化版本。

但是如果您在 public 中有其他个文件,并且希望仍能正确提供这些文件(例如图像文件) ,你需要使用更强大的东西。

我在 my blog in July 中写过这一点,但根据 Stack Overflow 惯例,我也会在这里对其进行扩展。基本上可以复制this Gist ,它声明一个 FrontEndServingController

该 Controller 在内置 Assets Controller 之上提供的关键功能是,首次使用时,它会递归扫描您的 public 目录以查找真实 文件,因此它知道何时提供它们,以及何时提供 index.html (您的 React 应用程序)。

然后您可以在 routes 文件中使用它,如下所示:

GET /       controllers.FrontEndServingController.index
GET /*file controllers.FrontEndServingController.frontEndPath(file)

关于java - 如何在 Play Framework 中重新创建 nginx 的 try_files 以托管 React 站点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47083215/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com