vue官方路由vue-router 默认 hash 模式 —— 使用 URL 的 hash 来模拟一个完整的 URL,于是当 URL 改变时,页面不会重新加载。
化重点:当 URL 改变时,页面不会重新加载,也就是说不会向服务器重新请求资源。前端url变化,完全由前端代码来控制页面。那么如果url 重新请求服务器就会出现找不到路径的情况:如:http://xxx.85.25.46/manage/address-tree请求服务器,但是vue是单页面应用,服务器的静态资源肯定没有这个路径,就会出现404 的错误。
所以默认用hash模式,hash模式的辨识是#,如简书的地址:https://www.jianshu.com/writer#/notebooks/28404818/notes/38442910/preview。
浏览器在解析url的时候,#后面的地址变化的时候不会重载,向服务器重新拉取资源,只会触发hashchange事件,vue也是利用了这一点,来设计了前端的hash模式路由。但是这样的url不是很漂亮,以前公司的项目我也是采用这样的url。想改,但是不知道怎么改,官网说了用history模式可以改,但是要修改服务器,但以前公司不给前端动服务器,于是就搁浅了。
最近又一个项目完结,闲来无事,主机用nginx搭建了服务器测试了下怎么去配置(关于nginx的教程网上一堆,就不记录了)。分享记录下配置:
location / {
root /var/www/www; #静态资源在服务器的路径
index index.html index.htm;
try_files $uri $uri/ /index.html; # 关键配置,找不到路径,返回index。牢记vue是单页面应用
}
通过这样的配置就规避了,服务器找不到浏览器请求的路径资源,返回404错误的问题。
我参照某些文章,有通过配置rewrite的方式,但是虽然能解决问题,但是在chrome network 中仍然能看到404的错误请求,只是在页面上看不到而已