最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue3 History模式刷新404問(wèn)題的原因分析和解決方案

 更新時(shí)間:2026年03月05日 08:42:00   作者:絕頂少年  
在 Vue3 項(xiàng)目開(kāi)發(fā)中,使用vue-router的 History 模式(無(wú) #號(hào)路由)能讓 URL 更簡(jiǎn)潔美觀,但部署后刷新非根路徑(如/xinlan、/hongyou)時(shí),常會(huì)出現(xiàn) 404 錯(cuò)誤,本文結(jié)合實(shí)際項(xiàng)目場(chǎng)景,從原理分析到服務(wù)器配置,完整解決這一問(wèn)題,需要的朋友可以參考下

引言

在 Vue3 項(xiàng)目開(kāi)發(fā)中,使用vue-router的 History 模式(無(wú) #號(hào)路由)能讓 URL 更簡(jiǎn)潔美觀,但部署后刷新非根路徑(如/xinlan、/hongyou)時(shí),常會(huì)出現(xiàn) 404 錯(cuò)誤。本文結(jié)合實(shí)際項(xiàng)目場(chǎng)景,從原理分析到服務(wù)器配置,完整解決這一問(wèn)題。

一、問(wèn)題現(xiàn)象

以實(shí)際 Vue3 項(xiàng)目為例,路由配置使用createWebHistory(History 模式),訪問(wèn)以下路徑時(shí):

  • ? http://192.168.1.137:88/(根路徑):正常訪問(wèn),刷新無(wú)問(wèn)題
  • ? http://192.168.1.137:88/xinlan(子路徑):首次訪問(wèn)正常,刷新報(bào) 404 錯(cuò)誤
  • ? http://192.168.1.137:88/#/xinlan(Hash 模式):刷新正常,但 URL 帶 #號(hào)不美觀

二、問(wèn)題本質(zhì):History 模式與服務(wù)器的路由沖突

1. Hash 模式 vs History 模式核心差異

表格

模式路由格式服務(wù)器請(qǐng)求路徑刷新邏輯
Hash(createWebHashHistory)http://xxx/#/xinlan僅請(qǐng)求http://xxx/(根路徑)服務(wù)器返回首頁(yè),前端解析 #后路由
History(createWebHistory)http://xxx/xinlan直接請(qǐng)求http://xxx/xinlan服務(wù)器查找/xinlan物理文件,找不到則 404

2. 核心原因

Vue3 的 History 模式是前端路由,但刷新時(shí)瀏覽器會(huì)把/xinlan當(dāng)成服務(wù)器物理路徑,而服務(wù)器上不存在該路徑對(duì)應(yīng)的文件,因此返回 404。

三、解決方案:保留 History 模式 + 服務(wù)器兜底配置

步驟 1:確認(rèn) Vue3 路由配置(無(wú)需修改)

先確保項(xiàng)目路由配置正確,以下是實(shí)際項(xiàng)目的路由代碼(已驗(yàn)證無(wú)語(yǔ)法錯(cuò)誤):

import { createRouter, createWebHistory } from 'vue-router'

const routes = [
  {
    path: '/',
    name: 'home',
    component: () => import('../views/HomeView.vue'),
    meta: { title: '自用工具' }
  },
  {
    path: '/xinlan',
    name: 'xinlan',
    component: () => import('../views/xinlansearch.vue'),
    meta: { title: '心藍(lán)查詢' }
  },
  {
    path: '/hongyou',
    name: 'hongyou',
    component: () => import('../views/hongyousearch.vue'),
    meta: { title: '紅郵查詢' }
  },
  {
    path: '/ip',
    name: 'ip',
    component: () => import('../views/ipgenerate.vue'),
    meta: { title: 'IP生成' }
  }
]

const router = createRouter({
  history: createWebHistory(process.env.BASE_URL),
  routes
})

// 頁(yè)面標(biāo)題設(shè)置
router.beforeEach((to, from, next) => {
  document.title = to.meta.title || 'RentHub'
  next()
})

export default router

步驟 2:服務(wù)器配置(核心解決步驟)

核心思路:讓服務(wù)器將所有非靜態(tài)文件的請(qǐng)求,都重定向到 Vue 項(xiàng)目的index.html,由前端路由接管解析。

場(chǎng)景 1:Nginx 部署(最常用)

  1. 找到 Nginx 配置文件(如nginx.conf或站點(diǎn)配置文件,路徑通常為/etc/nginx/nginx.conf/etc/nginx/conf.d/default.conf(Linux)或conf/nginx.conf(Windows))。
  2. 添加 / 修改以下配置:
server {
    listen 88; # 對(duì)應(yīng)項(xiàng)目訪問(wèn)端口
    server_name 192.168.1.137; # 服務(wù)器內(nèi)網(wǎng)/外網(wǎng)IP
    root /path/to/your/vue/dist; # 替換為Vue項(xiàng)目打包后的dist目錄絕對(duì)路徑
    index index.html; # 默認(rèn)首頁(yè)

    # 核心規(guī)則:解決History模式刷新404
    location / {
        try_files $uri $uri/ /index.html; # 優(yōu)先找靜態(tài)文件,找不到則返回index.html
    }

    # 可選:靜態(tài)資源緩存(優(yōu)化加載速度)
    location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
        expires 7d; # 緩存7天
        add_header Cache-Control "public, max-age=604800";
    }
}

重啟 Nginx 使配置生效:

# Windows

nginx -s reload

# Linux/Mac

sudo nginx -s reload

場(chǎng)景 2:Node.js + Express 部署

如果項(xiàng)目通過(guò) Node.js 的 Express 框架部署,創(chuàng)建server.js文件:

const express = require('express');
const path = require('path');
const app = express();

// 指向Vue打包后的dist目錄
const distPath = path.join(__dirname, 'dist');
app.use(express.static(distPath));

// History模式兜底規(guī)則
app.get('*', (req, res) => {
  res.sendFile(path.join(distPath, 'index.html'));
});

// 監(jiān)聽(tīng)88端口
app.listen(88, '192.168.1.137', () => {
  console.log('Vue3項(xiàng)目運(yùn)行在 http://192.168.1.137:88');
});

啟動(dòng)服務(wù):

node server.js

場(chǎng)景 3:Vue CLI 開(kāi)發(fā)環(huán)境(本地調(diào)試)

如果本地開(kāi)發(fā)時(shí)遇到該問(wèn)題,修改vue.config.js(無(wú)則新建):

module.exports = {
  devServer: {
    port: 88,
    host: '192.168.1.137',
    historyApiFallback: true, // 開(kāi)啟History模式兜底
    allowedHosts: 'all' // 允許內(nèi)網(wǎng)訪問(wèn)
  }
};

四、驗(yàn)證效果

配置完成后,訪問(wèn)以下路徑并刷新,確認(rèn)無(wú) 404 錯(cuò)誤:

  • http://192.168.1.137:88/xinlan
  • http://192.168.1.137:88/hongyou
  • http://192.168.1.137:88/ip

五、常見(jiàn)問(wèn)題排查

  1. 配置后仍 404
    • 檢查root路徑是否為 Vue 打包后dist目錄的絕對(duì)路徑;
    • 確認(rèn) Nginx 已重啟;
    • 檢查端口 88 是否被其他服務(wù)占用。
  2. 靜態(tài)資源加載失敗
    • 確認(rèn)try_files規(guī)則中包含$uri(優(yōu)先加載靜態(tài)文件);
    • 檢查dist目錄下是否有對(duì)應(yīng)的 js/css 文件。

總結(jié)

  1. Vue3 History 模式刷新 404 的核心是「前端路由被服務(wù)器當(dāng)成物理路徑」,需通過(guò)服務(wù)器配置兜底到index.html;
  2. Nginx 部署時(shí),核心配置是try_files $uri $uri/ /index.html;;
  3. 開(kāi)發(fā)環(huán)境可通過(guò)vue.config.jshistoryApiFallback: true快速解決;
  4. 該方案既保留了無(wú) #號(hào)的美觀 URL,又保證了刷新功能正常,適合生產(chǎn)環(huán)境部署。

以上就是Vue3 History模式刷新404問(wèn)題的原因分析和解決方案的詳細(xì)內(nèi)容,更多關(guān)于Vue3 History模式刷新404的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Vue3中的組合式?API示例詳解

    Vue3中的組合式?API示例詳解

    組合式 API 是一系列 API 的集合,使我們可以使用函數(shù)而不是聲明選項(xiàng)的方式書(shū)寫(xiě) Vue 組件,這篇文章主要介紹了什么是Vue3的組合式?API,需要的朋友可以參考下
    2022-06-06
  • avue實(shí)現(xiàn)自定義搜索欄及清空搜索事件的實(shí)踐

    avue實(shí)現(xiàn)自定義搜索欄及清空搜索事件的實(shí)踐

    本文主要介紹了avue實(shí)現(xiàn)自定義搜索欄及清空搜索事件的實(shí)踐,主要包括對(duì)搜索欄進(jìn)行自定義,并通過(guò)按鈕實(shí)現(xiàn)折疊搜索欄效果,具有一定的參考價(jià)值,感興趣的可以了解一下
    2021-12-12
  • 基于Vue實(shí)現(xiàn)拖拽效果

    基于Vue實(shí)現(xiàn)拖拽效果

    這篇文章主要介紹了基于Vue實(shí)現(xiàn)拖拽效果,文中給大家介紹了clientY pageY screenY layerY offsetY的區(qū)別講解,需要的朋友可以參考下
    2018-04-04
  • elementUI自定義上傳文件功能實(shí)現(xiàn)(前端后端超詳細(xì)過(guò)程)

    elementUI自定義上傳文件功能實(shí)現(xiàn)(前端后端超詳細(xì)過(guò)程)

    自定義上傳思路很簡(jiǎn)單,下面這篇文章主要給大家介紹了關(guān)于elementUI自定義上傳文件功能實(shí)現(xiàn)(前端后端超詳細(xì)過(guò)程)的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-11-11
  • vue表格(table)計(jì)算總計(jì)方式

    vue表格(table)計(jì)算總計(jì)方式

    這篇文章主要介紹了vue表格(table)計(jì)算總計(jì)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • Vue3中reactive變量重新賦值無(wú)法響應(yīng)的3種處理方法

    Vue3中reactive變量重新賦值無(wú)法響應(yīng)的3種處理方法

    這篇文章主要給大家介紹了關(guān)于Vue3中reactive變量重新賦值無(wú)法響應(yīng)的3種處理方法,在Vue3中可以使用reactive函數(shù)將一個(gè)普通對(duì)象轉(zhuǎn)換為響應(yīng)式對(duì)象,需要的朋友可以參考下
    2023-08-08
  • webpack4+express+mongodb+vue實(shí)現(xiàn)增刪改查的示例

    webpack4+express+mongodb+vue實(shí)現(xiàn)增刪改查的示例

    這篇文章主要介紹了webpack4+express+mongodb+vue 實(shí)現(xiàn)增刪改查的示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-11-11
  • Vue3使用vue-qrcode-reader實(shí)現(xiàn)掃碼綁定設(shè)備功能(推薦)

    Vue3使用vue-qrcode-reader實(shí)現(xiàn)掃碼綁定設(shè)備功能(推薦)

    本文介紹了在Vue3中使用vue-qrcode-reader版本5.5.7來(lái)實(shí)現(xiàn)移動(dòng)端的掃碼綁定設(shè)備功能,用戶通過(guò)掃描二維碼自動(dòng)獲取設(shè)備序列號(hào),并填充到添加設(shè)備界面,完成設(shè)備綁定的全過(guò)程,包含ScanCode.vue和DeviceAdd.vue兩個(gè)主要界面的實(shí)現(xiàn)方式
    2024-10-10
  • el-form-item?prop屬性動(dòng)態(tài)綁定不生效問(wèn)題及解決

    el-form-item?prop屬性動(dòng)態(tài)綁定不生效問(wèn)題及解決

    這篇文章主要介紹了el-form-item?prop屬性動(dòng)態(tài)綁定不生效問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • vue.js移動(dòng)端app實(shí)戰(zhàn)1:初始配置詳解

    vue.js移動(dòng)端app實(shí)戰(zhàn)1:初始配置詳解

    這篇文章主要介紹了vue.js移動(dòng)端app實(shí)戰(zhàn)1:初始配置詳解,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07

最新評(píng)論

祥云县| 信丰县| 资中县| 平利县| 长岛县| 治县。| 灌南县| 永善县| 罗甸县| 蒙阴县| 正定县| 辽阳市| 新宁县| 台南县| 得荣县| 沙坪坝区| 唐山市| 德保县| 拉萨市| 蒲江县| 拜城县| 涿鹿县| 溧阳市| 临沂市| 乐山市| 封丘县| 沽源县| 隆尧县| 芜湖县| 珠海市| 新津县| 兰溪市| 勃利县| 无为县| 乌鲁木齐县| 宁安市| 龙南县| 本溪市| 佛山市| 融水| 吉木萨尔县|