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.pswp.cn/web/42558.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/42558.shtml
英文地址,請注明出處:http://en.pswp.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;描述每條線段的左右端點坐標。 輸…