React刷新浏览器报404?

背景

前端由React构建。

后端使用Envoy作为流量网关,listeners的路由部分配置如下:

route_config:
  name: admin
  virtual_hosts:
    - name: admin
      domains: ["admin.example.com"]
      routes:
        - match:
            prefix: "/"
          route:
            cluster: admin

Envoy将下游请求代理到由Go编写的HTTP服务器,服务器内部路由的处理如下:

func main() {
    fs := http.FileServer(http.Dir("/path/to/build"))

    http.Handle("/", fs)

    if e := http.ListenAndServe(":80", nil); e != nil {
        panic(e)
    }
}

问题

只要带路径,刷新浏览器就报404。

疑惑

我知道是因为React Router的原因,也知道服务器为Nginx或者httpd时的解决方案。

但通过EnvoyGo部署时,Envoyprefix已经将所有路径的请求代理给了Go,而Gohttp.Handle也已经将所有路径的请求都一律返回静态文件,不论客户端实际请求的是什么路径,不应该都是得到静态文件吗?怎么会得到404呢?

想不通,跪求大佬指教,抱拳。

阅读 1.1k
1 个回答

修改HTTP服务器路由处理逻辑,问题解决。

func main() {
    http.HandleFunc(
        "/", func(w http.ResponseWriter, r *http.Request) {
            http.ServeFile(w, r, "/path/to/build")
        },
    )

    if e := http.ListenAndServe(":80", nil); e != nil {
        panic(e)
    }
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏