刷新应用,404错误。反应路由器问题

时间:2018-06-21 14:16:54

标签: reactjs nginx webserver react-router-v4 react-boilerplate

我正在使用反应样板(https://github.com/react-boilerplate/react-boilerplate) 我的应用程序可以在localhost上正常运行,但是在服务器上的SUBDIRECTORY(重要!不在根目录中!)应用程序中部署之后,应用程序才能刷新,直到刷新为止...如果我尝试在其他路由(/ something / here)中刷新应用程序,我收到找不到404错误页面的信息。

我在这个问题上进行了很多搜索,找出了问题所在和解决方案,但无法解决...您可以在此处查看问题说明: https://tylermcginnis.com/react-router-cannot-get-url-refresh/

我正在使用React Router4。也许我需要使用 historyApiFallback:true 但是Idk如何将它与具有很多webpack配置文件(不仅是..)的react样板一起使用。有帮助吗?

1 个答案:

答案 0 :(得分:1)

我以前也有这个问题。在localhost上完全可以,但是在非根目录路由上刷新或直接键入非根目录URL总是给我404。得出的结论是,它无法自行找到非根目录,因为React仅将index.html作为其HTML文档并且需要一些重写规则。

在我的情况下,我的主机正在使用Apache并将.htaccess添加到我的Web根目录中,并且具有以下内容:

<IfModule mod_rewrite.c>
  RewriteEngine on
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule . /index.html [L]
</IfModule>

对于nginx,您当然需要修改nginx配置。我在这里找到了一个答案,它看起来比Apache答案简单得多:React-router and nginx

location / {
  try_files $uri /index.html;
}

基本上,您需要告诉Web服务器将所有请求转发到React的index.html,从而让react-router处理路由。

其他解决方案是使用HashRouter,但会导致URL难看。