首发于个人github博客, 欢迎关注html
场景描述:前端
www.abc.com
, 以后点击界面里面的logout
,前端路由处理,跳转到www.abc.com/login
/login
的时候,没有报404?/login
逻辑:this.$router.push({name: 'login'});
贴下前端路由配置linux
routes: [
{
name: 'home',
path: '/',
component: Home,
meta: { requiresAuth: true },
},
{
path: '/login',
name: 'login',
component: Login,
},
{
path: '*',
component: NotFound,
}
]复制代码
现有nginx配置nginx
location / {
root: /var/data/static;
}复制代码
解决:git
为什么点击退出能够正常显示登陆页面?github
由于点击退出,使用的redirect是前端路由
this.$router.push({name: 'login'});
来实现的,这时候已经有index.html 和相关的js了,能够直接使用前端路由跳转到/login
路由对应的组件浏览器
为什么刷新的时候显示: nginx/404?bash
- 由于刷新的时候,会先向服务器请求xxxx.com/login,
- 这时候服务器的nginx配置中没有关于/login路径的配置,直接报nginx/404的错误
如何解决? 服务器
在nginx的
location /{root xxxpath}
中添加try_file: /index.html
的配置ui
解释:
- nginx进行匹配路径的时候,发现没有
/login
的路径,便会转到/
路径处理。- 发现
root
路径下(是静态文件的root目录,不是linux的root目录)没有login
文件,就会try_file
规则,返回index.html,- 这样浏览器拿到index.html 以后,开始加载其中的前端路由部分
- 这时候/login就会在前端路由中找到匹配规则。
同理/404
也能够写在前端路由中了