hash 和 history 的原理和区别:
hash模式是通过监听浏览器的onhashchange()事件变化,查找对应的路由规则
history是利用history中新增的两个API pushState()和 replaceState() 和一个事件onpopstate监听URL的变化history模式
vue-router 默认 hash 模式 —— 使用 URL 的 hash 来模拟一个完整的 URL,于是当 URL 改变时,页面不会重新加载。而history模式下会重新加载页面。所以会导致history没有服务器的支持,url改变的时候会报404。
怎么解决呢?
在服务端增加一个覆盖所有情况的候选资源:如果 URL 匹配不到任何静态资源,则应该返回同一个 index.html 页面,这个页面就是你 app 依赖的页面。
以下是nigx的配置的样例:
location / {
try_files $uri $uri/ /index.html;
}
history和hash还有一个区别就是hash模式会在url里面加一个—— #(井号)也叫锚点。history相比之下没有锚点更简洁。