如何为反应路由器配置Caddy服务器

时间:2019-09-03 13:25:39

标签: react-router caddy

我需要哪种类型的Caddyfile配置来正确地为带有React-Router的React App(使用create-react-app创建)提供服务?基本上,domain.com/app/(这是应用程序的根目录)应该重定向到index.htmldomain.com/app/sub应该重定向到index.html(路由将由react-router在前端完成) ,但是例如,domain.com/app/manifest.json也不应重定向到任何地方,因为它是需要提供的实际文件。然后还有domain.com/app/static/网址应按原样提供。

我当前的Caddyfile:

domain.com/app {
        root /server/public/app
        rewrite / {
                to {path} /
        }
}

这种类型的作品,但它也重定向domain.com/app/manifest.json和所有domain.com/app/static/网址。

如何告诉Caddy在路径中查找文件,如果该文件不存在,则重定向到根目录?文档暗示这是重写块应如何工作,但是我的配置文件中有问题,因为它似乎不起作用。

我已经尝试了许多示例,但是它们都还重定向了/ static /文件夹和manifest.json等。

3 个答案:

答案 0 :(得分:1)

您要查找的指令是try_files

将请求URI路径重写为站点根目录中列出的第一个文件。如果没有文件匹配,则不执行任何重写。

您需要的是:

try_files {path} /index.html

答案 1 :(得分:0)

我相信它可以按您期望的方式工作,我能够重现它,当您访问domain.com/app/manifest.json时,它会返回一个JSON文件

答案 2 :(得分:0)

我只是在测试如何始终为index.html服务,以使BrowserRouter正常工作,并最终得到以下Caddyfile:

/ {
  tls off
  gzip
  log stdout
  rewrite {
    to {file} index.html
  }
}

这样,它将始终尝试访问文件(脚本,样式,图像...),然后再退回投放index.html