首先咱们先找到问题,再解决问题,别嫌我啰嗦,首先说说react路由history三种模式。html
React Router 是创建在 history 之上的。 简而言之,一个 history 知道如何去监听浏览器地址栏的变化, 并解析这个 URL 转化为 location 对象, 而后 router 使用它匹配到路由,最后正确地渲染对应的组件。
经常使用的 history 有三种形式, 可是你也可使用 React Router 实现自定义的 history。前端
createHashHistoryreact
createBrowserHistorynginx
createMemoryHistory浏览器
这是一个你会获取到的默认 history ,若是你不指定某个 history 。它用到的是 URL 中的 hash(#)部分去建立形如 http://mtui.mtsee.com/#/help 的路由。
这个 支持 ie8+ 的浏览器,可是由于是 hash 值,因此不推荐使用。服务器
Browser history 是由 React Router 建立浏览器应用推荐的 history。它使用 History API 在浏览器中被建立用于处理 URL,新建一个像这样真实的 URL http://mtui.mtsee.com/help。ui
不会在地址栏被操做或读取。url
那么问题来了~
spa
使用reateHashHistory,由于这里用的#hash 方式,真正的url没变。变的只是hash值,因此咱们下次直接访问http://mtui.mtsee.com/#/help 这个地址就能直接访问,可是这种模式不利于SEO,不推荐使用。orm
使用createBrowserHistory的时候,由于是使用 History API处理url的,真实的url已经改变,当咱们从新刷新浏览器,内部已经重置,咱们下次再访问地址http://mtui.mtsee.com/help 的时候,以前的history已经更新,至关于直接到服务器去请求这个url,固然咱们用的是前端路由,服务器确定不知道这个是啥咯,因此返回404页面。
这里须要在服务器去设置。网上相关的资料不多,找到了一篇文章:nginx-for-react ,可是我用的是阿帕奇,不想去安装其余服务器,因而本身琢磨了下,决定试试对404进行重定向。因而想到了一个简单的方法:修改htaccess文件。
htaccess添加一句话:ErrorDocument 404 /index.html
竟然搞定了~ 问题获得解决~
那么404页面呢?这么粗鲁,老板知道吗?抛砖引玉,设置htaceess指定url重定向,本身去捣鼓啦,反正重定向到 /index.html 就能够的~