Reactjs 使用http服务器响应路由器

Reactjs 使用http服务器响应路由器,reactjs,react-router,httpserver,Reactjs,React Router,Httpserver,我们使用react-rouacter-dom和http服务器,当用户加载主页并单击导航链接时,新页面将完美加载,但当用户刷新该路径中的页面时,它返回404。 这意味着HTML5pushState不能与http服务器一起工作 例如: <Router> <Route exact path="/" component={Home} /> <Route path="/about" component={About} /> <Route p

我们使用
react-rouacter-dom
http服务器
,当用户加载主页并单击导航链接时,新页面将完美加载,但当用户刷新该路径中的页面时,它返回404。 这意味着HTML5
pushState
不能与
http服务器一起工作

例如:

<Router>
    <Route exact path="/" component={Home} />
    <Route path="/about" component={About} />
    <Route path="/topics" component={Topics} />
</Router>

如果用户转到
/about
页面并刷新它,将发生404错误


是否有办法解决此问题?

由于您的应用程序是单页应用程序,因此会发生错误,这意味着您的整个站点数据都加载到
/
路径上。这意味着,如果您尝试访问任何其他页面,而没有首先通过
/
路由加载站点,那么它将失败


Tyler McGinnis对解决此问题的各种方法有很好的了解。

您应该使用其他支持HTML5历史API的软件包,例如,而不是
http服务器

在运行http服务器时使用此软件包:

http-server --proxy http://localhost:8080? ./build
它将无法处理的任何错误请求重定向到react路由器配置所在的index.html。如果所有请求都到达该页面,则react路由器负责内部路由

顺便说一句,我在package.json-scripts中构建了一个小脚本,用于调用所有这些,并像这样为构建文件夹提供服务:

scripts: {
           ...
           "serveprod": "npm run build && http-server --proxy http://localhost:8080? ./build"
           ...
       }
然后就跑:

 npm run serveprod

我的问题是关于
http服务器
react路由器
您的问题是因为您的react包在
/
路由之外的任何路由上都不可用。您需要将服务器配置为将“/”作为备用路由。提示::对于create react app,您必须在
package.json
中指定
主页
,或者相应地设置
.env
变量:
PUBLIC\u URL=http://localhost:8080 纱线构建&http服务器--代理http://localhost:8080? ./构建
后面的问号的动机是什么?我必须把它取下来让它工作。。。