当 Vue 项目被部署到服务器之后,访问时出现 404 错误,通常由哪些原因导致?请列举并简要说明排查思路。
考察说明
考察对 Vue 单页应用部署细节及服务器配置的理解,以及对路由模式和服务器回退机制的掌握。
回答思路
- 【回答框架 1】Vue 项目默认是单页应用,路由由前端控制。部署后出现 404,最常见原因是服务器未配置回退到 index.html。开发时使用 history 模式的路由,路径请求需要由服务器将所有未匹配的请求返回 index.html。
- 【回答框架 2】对于 Nginx,需要配置 try_files $uri $uri/ /index.html;,对于 Apache,需要配置 FallbackResource /index.html;而如果是 hash 模式,则不会出现此问题,因为 hash 会在客户端处理。
- 【回答框架 3】如果部署在子路径下,需要在 Vue 的配置中设置 publicPath 或 base 属性,同时服务器配置也要匹配该子路径,否则资源引用的路径错误可能导致 404。
- 【回答框架 4】还可以检查服务器上文件路径是否正确,是否存在权限问题,以及路由文件的配置是否正确。
- 【回答框架 5】排查顺序:先用浏览器开发者工具查看请求的状态,确认是页面请求还是静态资源请求的 404;如果是页面刷新 404,则是服务器回退问题;如果是静态资源 404,则大概率是路径配置问题。
- 【关键点 1】history 模式必须配置服务器回退到 index.html。
- 【关键点 2】hash 模式不存在刷新 404 问题。
- 【关键点 3】子路径部署需同步配置 publicPath 和服务器路径。
- 【关键点 4】排查时区分页面 404 与资源 404,二者原因不同。
- 【易错点 1】只配置了前端路由,未修改服务器配置,导致刷新或直接访问子路由 404。
- 【易错点 2】子路径部署时,只改服务器或只改前端配置,导致资源路径错误。