history模式下刷新页面报404,如何解决?
用Vue Router的history模式开发单页应用时,点击链接跳转没问题,但直接刷新页面就报404。比如访问/user/profile会提示资源未找到。
我配置了路由:
const router = new VueRouter({
mode: 'history',
routes: [
{ path: '/user/:id', component: User },
{ path: '/profile', component: Profile }
]
})
服务器是Nginx,尝试在配置里加了:
location / { try_files $uri $uri/ /index.html; }但重启后还是不行。到底是哪里出了问题呢?
try_files,但可能还是有问题。直接用这个Nginx配置,我这边验证过很多次,基本不会出问题:几个关键点:
1.
root必须指向Vue项目打包后的dist目录,别写错了2.
try_files的作用是按顺序查找文件,如果找不到就回退到index.html,让前端路由接管3.
error_page 404 /index.html确保即使出错也交给前端处理如果你确认配置没问题但还是报404,检查一下是不是Nginx没重启成功,或者有缓存问题。可以用下面的命令重新加载配置:
sudo nginx -s reload还有个容易踩的坑是,有些人把
try_files写在了错误的location块里,比如只放在了某个子路径下,而不是根路径/。记得检查一下位置。最后吐槽一句,history模式虽然好看,但这种问题真的挺烦人。配好了就省心了。