vue-route+webpack部署单页路由项目,访问刷新出现404问题
来源:互联网 发布:阿迪达斯清风系列 知乎 编辑:程序博客网 时间:2024/06/13 13:32
问题描述:
最近在开发cms的时候使用Vue.js框架,利用vue-route结合webpack编写了一个单页路由项目,自己在服务器端配置nginx。部署完成后,访问没问题,从页面中点击跳转也没问题,但是只要点击刷新或通过浏览器地址栏回车,就会出现404现象!在本地开发中是没有这个问题的,调试的时候一切都是正常的
在服务器上
如直接访问地址:
http://10.***.**.116:8081/home/application/list
便会出现404
问题原因:
刷新页面时访问的资源在服务端找不到,因为vue-router设置的路径不是真实存在的路径。
如上的404现象,是因为在nginx配置的根目录/html/dist下面压根没有/home/application/list这个真实资源存在,这些访问资源都是在js里渲染的。
在这里因为我使用的是vue-router的history模式
vue-router 默认 hash 模式 —— 使用 URL 的 hash 来模拟一个完整的 URL,于是当 URL 改变时,页面不会重新加载。
因为我不想要很丑的 hash,就是使用路由的 history 模式,这种模式充分利用 history.pushState API 来完成 URL 跳转而无须重新加载页面。
const router = new VueRouter({ mode: 'history', routes: [...]})
当使用 history 模式时,URL 就像正常的 url,例如 http://yoursite.com/user/id,也好看!
不过这种模式要玩好,还需要后台配置支持。因为我们的应用是个单页客户端应用,如果后台没有正确的配置,当用户在浏览器直接访问 http://oursite.com/user/id 就会返回 404,便是出现了以上提及到的问题。
所以呢,你要在服务端增加一个覆盖所有情况的候选资源:如果 URL 匹配不到任何静态资源,则应该返回同一个 index.html 页面,这个页面就是你 app 依赖的页面。
问题解决:
后端配置例子
Apache
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.html$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.html [L]</IfModule>
nginx
location / { try_files $uri $uri/ /index.html;}
Node.js (Express)
https://github.com/bripkens/connect-history-api-fallback
注意:
给个警告,因为这么做以后,你的服务器就不再返回 404 错误页面,因为对于所有路径都会返回 index.html 文件。为了避免这种情况,你应该在 Vue 应用里面覆盖所有的路由情况,然后在给出一个 404 页面。
const router = new VueRouter({ mode: 'history', routes: [ { path: '*', component: NotFoundComponent } ]})
或者,如果你是用 Node.js 作后台,可以使用服务端的路由来匹配 URL,当没有匹配到路由的时候返回 404,从而实现 fallback。
- vue-route+webpack部署单页路由项目,访问刷新出现404问题
- vue-route+webpack部署单页路由项目,访问刷新出现404问题
- vue-route+webpack单页路由项目,打包后访问正常刷新出现404问题
- nginx配置vue-router+webpack项目部署访问刷新出现404问题
- vue-route部署后刷新出现404的解决
- Vue.js结合vue-router和webpack编写单页路由项目
- Vue.js结合vue-router和webpack编写单页路由项目
- Vue.js结合vue-router和webpack编写单页路由项目
- Vue.js结合vue-router和webpack编写单页路由项目
- 解决方案:SSM+vue+webpack+vue-resource+vue-route路由项目验证session过期跳转至登陆界面
- vue-cli的webpack项目,webpack-hot-middleware热加载热部署有时候不刷新页面
- webpack + vue.js + vue route
- 单页面模式路由刷新404问题
- Vue项目webpack打包部署到服务器
- vue单页路由跳转后scrollTop问题
- 使用laravel部署项目的需要注意的问题:路由访问404,pdo扩展
- 用vue-router和webpack搭建路由项目
- webpack管理Vue项目--组件和路由引入
- Java java 程序员 计划表 工作三年以内
- 面向接口编程的好处
- spring mvc controller间跳转 重定向 传参
- Android根据系统设置获得对应格式的当前日期字符串
- docker基础(陆续更新)
- vue-route+webpack部署单页路由项目,访问刷新出现404问题
- Java自带的性能监测工具用法简介——jstack、jconsole、jinfo、jmap、jdb、jsta、jvisualvm
- JavaWeb项目前端学习之CSS background-image的url路径问题
- 判断网络是否可用的方法
- 解决windows安装opencv中,出现问题:error configuration process, project files may be invalid
- Head First SQL 第二章
- Caffe+Ubuntu14.04+CUDA7.5安装笔记
- VS2015的单双字问题
- JVM内存模型