history 模式下一定要后端设置兜底吗?

在各种面经都提到了这个history路由服务器设置兜底的问题,那么,能否前端在路由守卫设置兜底呢?

阅读 3k
4 个回答

不行,因为访问url是从服务器取资源的过程,history模式下,路由变更时得去不同的服务器目录下取资源,但实际一般都是spa应用,只有1个页面,因此得配置访问不同地址时全部指向这个页面资源(所谓兜底);而hash模式下不需要配置的原因,是因为访问服务器地址是固定的,一直访问的同一个页面,页面根据#后面不同的hash渲染不同的内容而已;
这个配置工作按理应是要运维人员配置。但实际中,绝大部分中小公司中服务器配置一般都交给了后端配置,后端发版服务的时候顺手就配置了。


补充内容:
为何不能用前端路由守卫?
路由守卫本质是一个个具有特殊意义js function,在代码运行到某个特殊阶段才执行。如果history模式下后端不配置服务器,那么访问时根本无法从服务器下载到html、js、css等资源,项目都无法正常跑起来的,更不用说执行路由守卫了

不能,用户直接访问:http://my-app.com/user/id或者属性页面,客户端会向服务器发请求,如果服务器没配置对,用户看到404错误,后端兜底是因为,无论什么情况下都返回一个html文件一般是index.html,然后前端接管根据路径显示组件,上面这种情况请求时发给服务器的,前端还没加载和执行,路由守卫没法处理这种情况

无论你用哪种路由模式,前提都是得先和后端返回 html 的路由匹配上才行,html 加载了才有前端逻辑一说

不一定,只需要服务器配置即可,不一定需要后端来做,前端做也行

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题