Vue 項(xiàng)目部署在子目錄下時(shí)hash vs history 的真實(shí)區(qū)別解析
在 Vue 項(xiàng)目部署中, 子目錄部署是一個(gè)非常常見、但也非常容易踩坑的場景,例如:
http://ip:port/wvp/
而不是默認(rèn)的:
http://ip:port/
這時(shí),Vue Router 的 hash 模式 和 history 模式 在行為上會(huì)出現(xiàn)本質(zhì)區(qū)別。
一、先說結(jié)論
在子目錄(如 /wvp/)下部署 Vue 項(xiàng)目:
- ? hash 模式:穩(wěn)定、省心,幾乎不需要后端配合
- ?? history 模式:必須配合后端 / Nginx,否則刷新必 404
如果是內(nèi)部系統(tǒng) / 后臺(tái)管理系統(tǒng),強(qiáng)烈推薦 hash 模式。
二、hash 和 history 的 URL 本質(zhì)區(qū)別
1?? hash 模式
/wvp/#/dashboard
特點(diǎn):
#后面的內(nèi)容 不會(huì)發(fā)送給服務(wù)器- 屬于瀏覽器行為
- 前端路由完全由 Vue 接管
2?? history 模式
/wvp/dashboard
特點(diǎn):
- 完整路徑會(huì)發(fā)送給服務(wù)器
- 服務(wù)器必須知道如何處理這個(gè)路徑
三、子目錄 + hash:為什么幾乎不會(huì)出問題?
訪問流程解析
當(dāng)訪問:
http://ip:port/wvp/#/dashboard
瀏覽器與服務(wù)器的交互是:
瀏覽器請求 → /wvp/ 服務(wù)器返回 → index.html Vue Router 解析 → #/dashboard
?? 服務(wù)器永遠(yuǎn)只看到 /wvp/
hash 模式的優(yōu)勢
- 刷新頁面不會(huì) 404
- 瀏覽器直接訪問任意路由都正常
- 后端 / Nginx 無需任何額外配置
?? 子目錄部署下,hash 模式天生安全
四、子目錄 + history:為什么容易翻車?
訪問流程解析
訪問:
http://ip:port/wvp/dashboard
服務(wù)器接收到的是:
/wvp/dashboard
如果服務(wù)器沒有配置該路徑:
→ 找不到資源 → 返回 404
? 頁面刷新 404
? 瀏覽器直接訪問 404
? 前進(jìn) / 后退偶發(fā) 404
五、history 模式在子目錄下必須做哪些配置?
1?? 前端配置(缺一不可)
// vue.config.js
module.exports = {
publicPath: '/wvp/'
}// router/index.js
const router = new VueRouter({
mode: 'history',
base: '/wvp/',
routes
})2?? Nginx / 后端配置(核心)
Nginx 示例
location /wvp/ {
try_files $uri $uri/ /wvp/index.html;
}
含義:
- 如果是靜態(tài)資源 → 正常返回
- 如果不是 → 統(tǒng)一返回
index.html - 由 Vue Router 接管路由
如果沒有這一步會(huì)怎樣?
/wvp/dashboard → Nginx找文件 → 找不到 → 404
六、hash vs history:子目錄下的真實(shí)對比
| 對比項(xiàng) | hash 模式 | history 模式 |
|---|---|---|
| 子目錄部署 | ? 非常穩(wěn) | ?? 易翻車 |
| 是否依賴后端 | ? 不需要 | ? 必須 |
| 頁面刷新 | ? 永不 404 | ? 不配就 404 |
| URL 美觀 | ? 有 # | ? 干凈 |
| SEO | ? 差 | ? 好 |
| 運(yùn)維成本 | ? 低 | ??? 高 |
七、什么時(shí)候才應(yīng)該用 history?
- 對外網(wǎng)站
- 需要 SEO
- 需要分享干凈 URL
- 后端 / Nginx 完全可控
否則:
子目錄部署 + 內(nèi)部系統(tǒng) → hash 是最優(yōu)解
八、推薦配置(子目錄)
// vue.config.js
module.exports = {
publicPath: '/wvp/'
}
// router/index.js
export default new VueRouter({
mode: 'hash',
base: '/wvp/',
routes
})
? 不依賴后端
? 刷新不炸
? 部署簡單
九、總結(jié)
hash 是“工程優(yōu)先”
history 是“美觀優(yōu)先”
在子目錄部署場景下,穩(wěn)定永遠(yuǎn)比好看重要。
到此這篇關(guān)于Vue 項(xiàng)目部署在子目錄下:hash vs history 的真實(shí)區(qū)別的文章就介紹到這了,更多相關(guān)vue hash vs history區(qū)別內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- vue打包(hash和history)部署詳細(xì)步驟
- Vue3中createWebHistory和createWebHashHistory的區(qū)別詳析
- vue3中關(guān)于路由hash與History的設(shè)置
- Vue路由模式中的hash和history模式詳細(xì)介紹
- vue3中關(guān)于路由hash與History的設(shè)置
- Vue中Router路由兩種模式hash與history詳解
- Vue-router中hash模式與history模式的區(qū)別詳解
- vue vue-Router默認(rèn)hash模式修改為history需要做的修改詳解
- Vue-router 中hash模式和history模式的區(qū)別
相關(guān)文章
vue.extend,mixins和vue.component的區(qū)別及說明
Vue.extend 創(chuàng)建Vue的子類,可視為組件構(gòu)造函數(shù),Vue.mixin 允許全局添加方法或?qū)傩?方便所有組件使用,Vue.component 是插件注冊方法,通過Vue.extend創(chuàng)建的組件實(shí)例可以注冊到Vue全局,使其在任何組件中可用2024-09-09
從零開始在vue-cli4配置自適應(yīng)vw布局的實(shí)現(xiàn)
這篇文章主要介紹了從零開始在vue-cli4配置自適應(yīng)vw布局,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06
vue2.0如何動(dòng)態(tài)綁定img的src屬性(三元運(yùn)算)
這篇文章主要介紹了vue2.0如何動(dòng)態(tài)綁定img的src屬性(三元運(yùn)算)問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08
基于Vue實(shí)現(xiàn)卡片無限滾動(dòng)動(dòng)畫
這篇文章主要為大家詳細(xì)介紹了如何利用Vue制作出卡片無限滾動(dòng)動(dòng)畫,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)有一定幫助,需要的可以參考一下2022-05-05

