使用react-router 浏览器刷新,页面404问题解决

首先咱们先找到问题,再解决问题,别嫌我啰嗦,首先说说react路由history三种模式。html

history 配置

React Router 是创建在 history 之上的。 简而言之,一个 history 知道如何去监听浏览器地址栏的变化, 并解析这个 URL 转化为 location 对象, 而后 router 使用它匹配到路由,最后正确地渲染对应的组件。
经常使用的 history 有三种形式, 可是你也可使用 React Router 实现自定义的 history。前端

  • createHashHistoryreact

  • createBrowserHistorynginx

  • createMemoryHistory浏览器

这三个有什么区别呢:

createHashHistory

这是一个你会获取到的默认 history ,若是你不指定某个 history 。它用到的是 URL 中的 hash(#)部分去建立形如 http://mtui.mtsee.com/#/help 的路由。
这个 支持 ie8+ 的浏览器,可是由于是 hash 值,因此不推荐使用。服务器

createBrowserHistory

Browser history 是由 React Router 建立浏览器应用推荐的 history。它使用 History API 在浏览器中被建立用于处理 URL,新建一个像这样真实的 URL http://mtui.mtsee.com/helpui

Memoryhistory

不会在地址栏被操做或读取。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 就能够的~

相关文章
相关标签/搜索