42. Vue、React 等前端项目部署,刷新 404 问题解决方案
首发于我的github博客, 欢迎关注
nginx 匹配的 try_file 与前端路由的优先级问题
nginx 匹配的 try_file 与前端路由的优先级问题
场景描述:
- 访问
www.abc.com
, 之后点击界面里面的logout
,前端路由处理,跳转到www.abc.com/login
- 但是登录页面刷新之后,就显示nginx 404了
- 奇怪的地方就在于,为何退出的时候,重定向到
/login
的时候,没有报404? - 前端路由重定向到
/login
逻辑:this.$router.push({name: 'login'});
贴下前端路由配置
routes: [ { name: 'home', path: '/', component: Home, meta: { requiresAuth: true }, }, { path: '/login', name: 'login', component: Login, }, { path: '*', component: NotFound, } ]
现有nginx配置
location / { root: /var/data/static; }
- 访问
解决:
为何点击退出可以正常显示登录页面?
因为点击退出,使用的redirect是前端路由this.$router.push({name: 'login'});
来实现的,这时候已经有index.html 和相关的js了,可以直接使用前端路由跳转到/login
路由对应的组件为何刷新的时候显示: nginx/404?
- 因为刷新的时候,会先向服务器请求xxxx.com/login,
- 这时候服务器的nginx配置中没有关于/login路径的配置,直接报nginx/404的错误
如何解决?
在nginx的location /{root xxxpath}
中添加try_file: /index.html
的配置解释:
- nginx进行匹配路径的时候,发现没有
/login
的路径,便会转到/
路径处理。 - 发现
root
路径下(是静态文件的root目录,不是linux的root目录)没有login
文件,就会try_file
规则,返回index.html, - 这样浏览器拿到index.html 之后,开始加载其中的前端路由部分
- 这时候/login就会在前端路由中找到匹配规则
- nginx进行匹配路径的时候,发现没有
- 同理
/404
也可以写在前端路由中了
相关推荐
PncLogon 2020-09-24
颤抖吧腿子 2020-09-04
前端小白 2020-07-19
kiven 2020-09-11
softwear 2020-08-21
anaction 2020-08-17
liduote 2020-11-13
chenhaotao 2020-11-13
localhost0 2020-11-12
小秋 2020-11-12
lxhuang 2020-11-03
学习web前端 2020-10-27
小焊猪web前端 2020-10-24
杏仁技术站 2020-10-23
南昌千网科技 2020-10-18
liduote 2020-10-16
BlueSkyUSC 2020-10-15
Doniet 2020-10-08
zjutzmh 2020-09-25