Vue上线后,点击刷新按钮报错404问题
使用vue-cli构建的项目上服务器后,点击刷新按钮报错404问题,这个问题困扰好多天了,今天决定把它解决掉。
首先,出问题的原因是:
在 Vue 项目中,可以选择 hash或者 history.pushState() 实现路由跳转。如果在路由中使用history模式:
export default new Router({
mode: 'history',
})
那么,当我们 npm run build 完成并部署到服务器后,刷新某个路由下的页面,会出现 404 或者 502 错误。
这是因为刷新页面时访问的资源在服务端找不到,因为vue-router设置的路径不是真实存在的路径。
所以,解决问题的重点是如何使他找到正确的资源路径。
网上查找了一段时候后,有这几个解决方法:
1.被提到最多的是使用Nginx配置,让所有路由(url)下的页面重写到 index.html即可:
2.apache里面配置,这个方法在vue-router的官网有介绍(https://router.vuejs.org/zh/guide/essentials/history-mode.html#%E5%90%8E%E7%AB%AF%E9%85%8D%E7%BD%AE%E4%BE%8B%E5%AD%90)
3.原生nodejs配置(官方文档也有介绍)
之前是不希望加一个Nginx让开发变得更加麻烦,于是尝试使用其他的方式,结果花了不少时间还是没有解决,所以现在老老实实使用Nginx了。
网上查一下nginx的学习资料
(nigix的安装)https://www.cnblogs.com/wangyulong/p/7350189.html
(nginx的使用)https://blog.csdn.net/tomcat_2014/article/details/53129796
在学习使用中,我发现了有个问题,就是 “/” 指的是当前路径还是根路径?
如图红圈处:
经过测试,发现指的是前面root指的当前路径,/的路径为追加的路径。
通过nignx的学习加上vue-router的官方文档的介绍:
终于知道该怎么写了
Nginx的写法:
这么写之后,就能实现vue的刷新功能了。
附Nginx常用命令:
启动
./nginx
检查 nginx.conf配置文件
./nginx -t
重启
./nginx -s reload
停止
./nginx -s stop