路由模式:hash和history模式

本文对比了前端开发中Hash与History路由模式的区别,探讨了它们在URL展示、刷新行为及后端配置需求上的不同,并提供了具体的实现代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

hash 模式 url 里面永远带着#号,我们在开发当中默认使用这个模式。
如果用户考虑 url 的规范那么就需要使用 history 模式,因为 history 模式没有#号,是个正常的 url 适合推广宣传。
当然其功能也有区别,比如我们在开发 app 的时候有分享页面,那么这个分享出去的页面就是用 vue 或是 react
做的,咱们把这个页面分享到第三方的 app 里,有的 app 里面 url 是不允许带有#号的,所以要将#号去除那么就要使用 history 模式。
但是使用 history 模式还有一个问题就是,在访问二级页面的时候,做刷新操作,会出现 404 错误,那么就需要和后端人配合让他配置一下 apache 或是 nginx 的 url 重定向,重定向到你的首页路由上就 ok 啦。

区别

hashhistory
url 显示有#,很 Lowurl 显示无#,好看
回车刷新 可以加载到 hash 值对应页回车刷新一般就是 404 掉了
无需后端配置需要后端配置
支持低版本浏览器和 IE浏览器 HTML5 新推出的 API
hash模式的路由器

路由器默认的工作模式是hash模式,例如http://localhost:8080/#/demo
对于这种路由模式不需要多余的配置,具体如下:

router/index.js
import VueRouter from "vue-router";
import Demo from "@/views/demo";
const routers = [
 {   
     path:"/demo",
     component:Demo
 }
]
const router = new VueRouter({
    routes:[...routers]
})
export default router;

history模式的路由器

这种路由模式在项目中较为常见,例如http://localhost:8080/demo
对于这种路由模式前端及nginx都需要进行配置

router/index.js
import VueRouter from "vue-router";
import Demo from "@/views/demo";
const routers = [
 {   
     path:"/demo",
     component:Demo
 }
]
const router = new VueRouter({
    mode: 'history', // 修改为history路由
    // base: '', // 为路由设置基础路径
    routes:[...routers]
})
export default router;
常见bug
一:报错:Unexpected token ‘<‘ 错误解决方法

在这里插入图片描述

错误原因

引入的资源路径出错的问题

bug解决

方法一:调整路由模式;
方法二:不改路由模式,改配置文件:
1:修改部署应用包时的基本url,将绝对路径改为相对路径(或者不设置publicPath,默认就是相对路径)
:2: 修改vue.config.js,具体修改如下:

module.exports = {
  publicPath: '/'
}
二:报错:We’re sorry but XXX doesn’t work properly without JavaScript enabled

在这里插入图片描述

错误原因

先检查请求的url是否正确,是否少或者多斜杠问题,例如http://localhost:3000/api/add 变为了 http://localhost:3000/api//add

bug解决

方法一:调整路由模式,改为hash路由;
方法二:publicPath: ‘/’
方法三:修改nginx具体如下:

location ^~ /api/ {     #api:后端服务代理路径(根据项目实际情况配置)
    proxy_pass http://localhost:3000/;  #后端服务真实地址
}
三:当路由模式为history路由时,刷新页面报404
错误原因

history路由模式下会请求到服务端,但服务端并没有这一个资源文件,所以就会返回404

bug解决

修改nginx配置
方案一如下:

 location / {
    root   /usr/share/nginx/html/dist;  # 存放dist
    index  index.html index.htm;
    try_files $uri $uri/  /index.html;  # 解决history路由页面刷新404问题
 }

方案二如下:

location /{
    root   /usr/share/nginx/html/dist;  # 存放dist
    index  index.html index.htm;
     # 解决history路由页面刷新404问题
    if (!-e $request_filename) {
        rewrite ^/(.*) /index.html last;
        break;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hyduan200

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值