html5路由如何在nginx上部署(vite+vue3)

我们知道前端常用的有Hash 模式和html5模式的路由,hash模式在nginx上部署不需要额外的操作,而html5模式则需要额外设置,这里介绍下如何在nginx根地址(location / {})下部署和在非根地址上(location /admin{})部署。

在这之前,我先说一下 为什么html5路由需要在nginx上配置,我们知道,vue-router就是用来处理路由的,我我们在浏览器上输入地址时,这时候,html5是通过浏览器的history api 来处理地址,但是,这出现了一个问题,当浏览器访问地址时,这时候,服务器上第一个接受这个地址的时nginx,nginx在没有我们配置的情况下,自己把这个地址给处理了,假设,我们发送的是www.abc.com/home,nginx收到这个地址第一件事不是把这个地址转给我们打包的前端的router来处理,而是自己处理,自己先找你有没有在nginx上配置这个home文件或目录,如果没有,直接就返回404,我们要做的是,在nginx上设置,不管你接收到什么地址,全部交给前端处理,也就是vue-router。

 1.根地址如何部署html5路由

        1.1 在项目打包部署前,我们确定我们要做的是部署在说明地址上,在vue-router的配置里,配置了路由模式后,我们要对路由模式进行处理。在createWebHistory('/')上插入地址,告诉router,基础路由是这个,后续的路由都是在这个地址后面运行。代码如下:

import { createRouter, createWebHistory } from "vue-router";
const headline=" |"
const router = createRouter({history: createWebHistory('/'),  //告诉router 我们后续的路由是以这个为基础,就是以根地址为基础运行routes: [{ path: '/:pathMatch(.*)*', redirect:"/",name:"404"}, //解决history模式下的路由无法匹配问题{path: "/",name: "index",component: () => import("../views/BaseLayout.vue"),children: [{path: "",name: "home",component: () => import("../views/home/HomeView.vue"),meta: { title: `首页${headline}` },},{path: "/forum",name: "forum",component: () => import("../views/forum/ForumView.vue"),meta: { title: `关于论坛${headline}` },},{path: "/journalism",name: "journalism",component: () => import("../views/journalism/JournalismView.vue"),meta: { title:`新闻中心${headline}` },},{path: "/partner",name: "partner",component: () => import("../views/partner/PartnerView.vue"),meta: { title:`合作伙伴${headline}` },},{path: "/territory",name: "territory",component: () => import("../views/territory/TerritoryView.vue"),meta: { title:`关注领域${headline}` },},],},],scrollBehavior (to, from, savedPosition){return { top: 0 }},
});
router.beforeEach((to: object | any, from, next) => {//beforeEach是router的钩子函数,在进入路由前执行if (to.meta.title) {//判断是否有标题document.title = to.meta.title;}next(); //执行进入路由,如果不写就不会进入目标页
});router.afterEach((to, from) => {})
export default router;

        1.2 当我们在router上配置后就可以打包,然后就可以配置nginx了,在nginx上,我们要告诉nginx,你收到什么路由,除了和自己有关的地址,其他的你全部转给前端的router来处理。

        

    location / {  #/是nginx要管的,其他的nginx全部转给前端来处理root /data/dist; try_files $uri $uri/ /index.html; #这里告诉nginx如果用户访问的是你没有配置的地址,你全转给前端的router,这个index.html是前端的入口文件。index index.html index.htm;}

        到这里之后,根地址的html5路由已经部署在nginx上,也不会出现刷新后404的问题了

 2.非根地址如何部署html5路由 

        非根路路由下要稍微复杂一点,假设我们要把资源部署在www.sss.com/admin地址下,其中的admin就是非根地址。

        1.1 首先 我们也是需要在router上配置地址,也是告诉router,我们后续的路由要在/admin的地址上运行,防止和nginx上形成冲突。代码如下

import { createRouter, createWebHistory } from "vue-router";
const headline=" |"
const router = createRouter({history: createWebHistory('/admin'),  //告诉router 我们后续的路由是以这个为基础,就是以根地址为基础运行routes: [{ path: '/:pathMatch(.*)*', redirect:"/",name:"404"}, //解决history模式下的路由无法匹配问题{path: "/",name: "index",component: () => import("../views/BaseLayout.vue"),children: [{path: "",name: "home",component: () => import("../views/home/HomeView.vue"),meta: { title: `首页${headline}` },},{path: "/forum",name: "forum",component: () => import("../views/forum/ForumView.vue"),meta: { title: `关于论坛${headline}` },},{path: "/journalism",name: "journalism",component: () => import("../views/journalism/JournalismView.vue"),meta: { title:`新闻中心${headline}` },},{path: "/partner",name: "partner",component: () => import("../views/partner/PartnerView.vue"),meta: { title:`合作伙伴${headline}` },},{path: "/territory",name: "territory",component: () => import("../views/territory/TerritoryView.vue"),meta: { title:`关注领域${headline}` },},],},],scrollBehavior (to, from, savedPosition){return { top: 0 }},
});
router.beforeEach((to: object | any, from, next) => {//beforeEach是router的钩子函数,在进入路由前执行if (to.meta.title) {//判断是否有标题document.title = to.meta.title;}next(); //执行进入路由,如果不写就不会进入目标页
});router.afterEach((to, from) => {})
export default router;

          1.2 配置静态文件路径,防止因为nginx改了地址,导致请求不到静态资源,在vite.config.ts里添加base:"/admin" ,这里建议使用变量,防止漏改。代码如下:

export default defineConfig({base:"/admin", #和我们nginx配置的非根地址一致,防止静态资源404plugins: [vue(),],assetsInclude: ['**/*.png', '**/*.jpg'], 
})

        1.3当前端配置好打包后,在nginx上要配置我们的非根地址,和指向index.html,多的不说,全在代码里,这里要注意下,当nginx配置非根路由时,我们不能用root来绑定前端包了,而是要用alias

    location /admin {  #定义好我们的非根地址,这里要注意与router里的一致,防止冲突alias /data/dist;try_files $uri $uri/ /admin/index.html; #因为前端的base里定义了admin,所以这里要加上,防止404index index.html index.htm;}

        部署好后重启nginx,然后就可以访问多个项目啦 如www.aaaa.com 是客户端项目 www.aaa.com/admin是管理员端项目 www.aaa.com/user 是内部端项目,拜

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/42558.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【MATLAB源码-第232期】基于matlab的 (204,188) RS编码解码仿真,采用QPSK调制输出误码率曲线。

操作环境: MATLAB 2022a 1、算法描述 Reed-Solomon码(RS码)是一类广泛应用于数字通信和存储系统中的纠错码,尤其在光盘、卫星通信和QR码等领域有着重要作用。RS码是一种非二进制的纠删码,由Irving S. Reed和Gustave…

当CNN遇上Mamba,高性能与高效率通通拿下!

传统视觉模型在处理大规模或高分辨率图像时存在一定限制,为解决这个问题,研究者们就最近依旧火热的Mamba,提出了Mamba结合CNN的策略。 这种结合可以让Mamba在处理长序列数据时既能够捕捉到序列中的时间依赖关系,又能够利用CNN的局…

思维+并查集,1670C - Where is the Pizza?

一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 1670C - Where is the Pizza? 二、解题报告 1、思路分析 考虑两个数组a,b的每个位置只能从a,b中挑一个 不妨记posa[x]为x在a中位置,posb同理 我们假如位置i挑选a[i]&a…

【JS+H5+CSS实现烟花特效】

话不多说直接上代码 注意:背景图路径是picture/star.jpg&#xff0c;自己在同级目录先创键picture目录再下载一张图片命名为star.jpg HTML: <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"vi…

【LLM】三、open-webui+ollama搭建自己的聊天机器人

系列文章目录 往期文章回顾&#xff1a; 【LLM】二、python调用本地的ollama部署的大模型 【LLM】一、利用ollama本地部署大模型 目录 前言 一、open-webui是什么 二、安装 1.docker安装 2.源码安装 三、使用 四、问题汇总 总结 前言 前面的文章&#xff0c;我们已经…

探索Qt的QVariant:灵活的数据交换机制

&#x1f60e; 作者介绍&#xff1a;欢迎来到我的主页&#x1f448;&#xff0c;我是程序员行者孙&#xff0c;一个热爱分享技术的制能工人。计算机本硕&#xff0c;人工制能研究生。公众号&#xff1a;AI Sun&#xff08;领取大厂面经等资料&#xff09;&#xff0c;欢迎加我的…

VMware使用技巧

目录 1. 系统快照 1.1 拍摄快照 1.2 查看快照 1.3 应用/删除快照 2. 克隆虚拟机 3. 删除虚拟机 1. 系统快照 1.1 拍摄快照 将当前系统的状态保存下来&#xff0c;如果将来系统出现不可修复的故障&#xff0c;使用快照可以恢复操作系统&#xff1b; CentOS7——拍照—…

【开源】基于RMBG的一键抠图与证件照制作系统【含一键启动包】

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

【Linux】System V信号量详解以及semget()、semctl()和semop()函数讲解

&#x1f490; &#x1f338; &#x1f337; &#x1f340; &#x1f339; &#x1f33b; &#x1f33a; &#x1f341; &#x1f343; &#x1f342; &#x1f33f; &#x1f344;&#x1f35d; &#x1f35b; &#x1f364; &#x1f4c3;个人主页 &#xff1a;阿然成长日记 …

Kotlin构造函数

目录 构造函数类型 主构造函数 成员变量设置 私有化操作 次级构造函数 构造函数类型 主构造函数&#xff08;主构造器&#xff09;——只能有一个次构造函数&#xff08;次构造器&#xff09;——可以是多个 主构造函数 构造器 constructor关键字前 无注解或修饰符作用&…

性能监控的革命:Eureka引领分布式服务监控新纪元

性能监控的革命&#xff1a;Eureka引领分布式服务监控新纪元 引言 在微服务架构中&#xff0c;服务的分布式性能监控对于维护系统健康和优化用户体验至关重要。Eureka作为Netflix开源的服务发现框架&#xff0c;为服务的注册与发现提供了强大支持&#xff0c;而结合其他工具&…

数字化转型:企业法务管理的未来发展 ​​​

在数字化浪潮的推动下&#xff0c;企业法务管理正经历着前所未有的变革。传统的法务工作模式在数据处理、合同审查、风险评估等方面逐渐显得力不从心。面对这一挑战&#xff0c;企业法务管理的数字化转型成为提升效率、保障合规、优化法律服务的必然选择。 数字化转型涉及到法…

HTML(30)——动画

动画 实现步骤 定义动画 keyframes 动画名称{ from{} to{} } keyframes 动画名称{ 0%{} 10%{} .... 100%{} } 2.使用动画 animation:动画名称 动画花费时间; 示例&#xff1a;盒子的宽度从200变到400px&#xff0c;两个状态一般用from to的形式 <style>.box {width: …

解析Xml文件并修改QDomDocument的值

背景&#xff1a; 我需要解决一个bug&#xff0c;需要我从xml中读取数据到QDomDocument&#xff0c;然后获取到我想要的目标信息&#xff0c;然后修改该信息。 ---------------------------------------------------------------------------------------------------------…

各大常用代码编辑器的快捷键集合

visualstudio2017 快捷键 多行注释 crtl / 取消多行注释crtl Q 代码跳转返回 crtl /- visualcode快捷键 代码跳转返回 crtl 左键/右键 androidstudio快捷键 代码跳转返回 crtl alt 左键/右键

VUE中ECharts提示框tooltip自动切换

目录 前言1导入插件2定义参数3 插件API 前言 使用VUE开发的数据大屏统计&#xff0c;又需要将 echarts的提示框 tooltip 实现自动切换&#xff0c;网上有个很简单的插件&#xff08;echarts-tooltip-auto-show&#xff09;&#xff0c;使用教程简单分享给大家。 自动每隔几秒切…

哦华为仓颉语言

本来我不太想说的&#xff0c;奈何有不少粉丝提问提到了这语言&#xff0c;目前的情况我不透露太多&#xff0c;看过这课程C实现一门计算机编程语言到手撸虚拟机实战的懂的自然懂。 在互联网领域几乎大部分应用软件运行在X86 LINUX上居多&#xff0c;如果你有问题可以先学习这…

多版本python环境中,让python3固定指向其中一个python可执行文件

如果你只安装一个python环境&#xff0c;那么一般可执行文件名就叫python.exe和pythonw.exe 但是如果你有多个python环境时&#xff0c;可执行文件名是需要进行修改的&#xff0c;使得在安装库和调用时能够分辨python环境&#xff0c;比如我的电脑中装有python3.10和python2.x …

Transformer模型论文解读、源码分析和项目实践

本文是ChatGPT系列的开篇之作&#xff0c;为什么吧Transformer放到这里呢&#xff0c;因为不管是chatgpt-1&#xff0c; chatgpt-2&#xff0c; chatgpt-3都是以Transformer作为底层基础来实现&#xff0c;相当于chatgpt系列的老祖先了。如果想要深入的了解清楚chatgpt的来龙去…

AcWing 4173. 线段 (贪心)

数轴上有 n 条线段&#xff0c;选取其中 k 条线段使得这 k&#x1d458; 条线段两两没有重合部分&#xff0c;问 k 最大为多少。 输入格式 第一行为一个正整数 n&#xff1b; 在接下来的 n 行中&#xff0c;每行有 2 个数 ai,bi&#xff0c;描述每条线段的左右端点坐标。 输…