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

Vue3+Vite+Nginx部署后刷新404白屏問題的完整排查指南

 更新時間:2026年03月04日 08:29:28   作者:一勺菠蘿丶  
文章詳細介紹了Vue單頁應用(SPA)首次進入頁面正常,一刷新就白屏或404的兩種情況及其背后的原因,文章還提供了完整的修復步驟,包括修改Vite打包配置、檢查Nginx配置、重新構建并部署等,需要的朋友可以參考下

癥狀:Vue 單頁應用(SPA)首次進入頁面正常,一刷新就白屏或 404。

一、問題現(xiàn)象

  • 訪問 http://your-server/dashboard/home → 正常
  • 在該頁面按 F5 / Ctrl+R 刷新 → 白屏,控制臺報大量 404
  • 瀏覽器地址欄 URL 沒變,但頁面什么都加載不出來

二、問題本質:兩個獨立原因疊加

刷新白屏這個現(xiàn)象,背后其實有兩個完全不同的原因,必須同時解決,缺一不可。

原因一:Nginx 不認識 Vue Router 的路由路徑(基礎原因)

Vue Router 使用 HTML5 History 模式createWebHistory)時,/dashboard/home 這類路徑是純前端路由,不對應任何真實文件

首次進入為什么正常?

用戶從首頁 / 進入應用,Nginx 找到真實的 index.html 并返回,Vue 的 JS 運行后,Vue Router 接管所有導航。用戶點擊菜單跳轉到 /dashboard/home,這是 Vue Router 通過瀏覽器 History.pushState() 完成的,根本沒有向服務器發(fā)送任何 HTTP 請求,所以正常。

刷新為什么失???

刷新時瀏覽器向服務器發(fā)出真實的 HTTP 請求:GET /dashboard/home。Nginx 在硬盤上找不到對應的文件,于是返回 404。

瀏覽器刷新  →  HTTP GET /dashboard/home  →  Nginx 找文件  →  找不到  →  404

Nginx 修復方式:配置 try_files,當找不到文件時,統(tǒng)一回退到 index.html,讓 Vue Router 接管路由判斷。

location / {
    root /home/your-app/dist;
    index index.html;
    try_files $uri $uri/ /index.html;   # 關鍵:找不到文件就返回 index.html
}

原因二:VITE_PUBLIC_PATH = ./導致資源路徑錯位(隱藏原因,也是本文重點)

僅修復 Nginx 之后,很多人發(fā)現(xiàn):刷新后頁面不再 404 了,但變成了白屏——HTML 返回了,JS/CSS 卻全部 404。

這是因為 Vite 打包時,base 配置項(對應 VITE_PUBLIC_PATH)決定了 index.html 里所有靜態(tài)資源的引用方式。

./(相對路徑)vs/(絕對路徑)的區(qū)別

VITE_PUBLIC_PATH = ./,打包產物 index.html 內容如下:

<script type="module" crossorigin src="./assets/index-BsHqOBiK.js"></script>
<link rel="stylesheet" href="./assets/index-Df9KKQPD.css" rel="external nofollow" >

./相對于當前頁面 URL 的路徑,瀏覽器會根據(jù)當前 URL 來解析:

當前 URL./assets/index.js 解析結果服務器實際文件結果
/(首頁)/assets/index.js/dist/assets/index.js? 正常
/dashboard/home(刷新)/dashboard/assets/index.js不存在? 404

VITE_PUBLIC_PATH = /,打包產物 index.html 內容如下:

<script type="module" crossorigin src="/assets/index-BsHqOBiK.js"></script>
<link rel="stylesheet" href="/assets/index-Df9KKQPD.css" rel="external nofollow" >

/ 開頭是絕對路徑,瀏覽器無論在哪個 URL 下,都固定從網站根路徑加載:

當前 URL/assets/index.js 解析結果服務器實際文件結果
/(首頁)/assets/index.js/dist/assets/index.js? 正常
/dashboard/home(刷新)/assets/index.js/dist/assets/index.js? 正常

為什么首次進入正常,刷新才白屏?

因為"首次進入"通常是從網站根路徑 / 加載的 index.html,此時 ./ 被正確解析為 /assets/...,資源加載成功,Vue 啟動。

后續(xù)的頁面跳轉(/dashboard/home)是 Vue Router 純前端路由,不觸發(fā)新的 HTML 請求,資源早就加載完畢了,所以一切正常。

刷新時,瀏覽器重新請求 /dashboard/home 對應的 HTML,Nginx 回退返回 index.html,但瀏覽器此時 URL 是 /dashboard/home,./assets/... 被解析為 /dashboard/assets/...,全部 404,白屏。

三、完整修復步驟

第一步:修改 Vite 打包配置

找到項目里的 .env.production(或 vite.config.ts 里的 base 字段):

# .env.production
- VITE_PUBLIC_PATH = ./
+ VITE_PUBLIC_PATH = /

或直接在 vite.config.ts 里:

export default defineConfig({
-  base: './',
+  base: '/',
})

第二步:檢查 Nginx 配置

確保 Nginx 有正確的 try_files 兜底:

server {
    listen 80;
    server_name your-domain.com;

    root /home/your-app/dist;
    index index.html;

    location / {
        try_files $uri $uri/ /index.html;   # 必須有這行
    }

    # 靜態(tài)資源緩存(可選)
    location ~* \.(js|css|png|jpg|gif|ico|svg|woff2?)$ {
        expires 30d;
        access_log off;
    }
}

注意 try_files 最后參數(shù)必須是 URI(如 /index.html),不能是文件系統(tǒng)絕對路徑(如 /home/app/dist/index.html),否則 Nginx 會把它當 URL 再次查找,導致死循環(huán)或 404。

第三步:重新構建并部署

npm run build
# 將 dist/ 目錄上傳到服務器
nginx -s reload

第四步:驗證構建產物

grep -o 'src="[^"]*"' dist/index.html | head -5

正確輸出(絕對路徑,/ 開頭):

src="/assets/index-BsHqOBiK.js"

錯誤輸出(相對路徑,./ 開頭):

src="./assets/index-BsHqOBiK.js"

四、常見錯誤配置(避坑)

錯誤一:try_files 用文件路徑而非 URI

# ? 錯誤:/home/app/dist/index.html 被當作 URL 解析
try_files $uri $uri/ /home/app/dist/index.html;

# ? 正確:/index.html 是 URL 路徑,Nginx 會用 root 拼接找到真實文件
try_files $uri $uri/ /index.html;

錯誤二:alias + try_files 兜底路徑寫錯

location /app {
    alias /home/app/dist/;

    # ? 錯誤:兜底 URI 用 /index.html,
    # 這會跳回 location /,然后用 root 目錄找文件,與 alias 目錄不同
    try_files $uri $uri/ /index.html;

    # ? 正確:兜底 URI 帶上 location 前綴,讓請求再次進入這個 location
    try_files $uri $uri/ /app/index.html;
}

錯誤三:Hash 模式不需要任何 Nginx 配置

如果你使用的是 createWebHashHistory(URL 帶 #,如 /#/dashboard/home),# 后面的內容不會發(fā)送給服務器,Nginx 永遠只收到 GET /,不存在刷新 404 問題,無需任何特殊配置。

只有 createWebHistory(無 # 的干凈 URL)才需要上述配置。

五、總結

問題原因修復方式
刷新 404Nginx 不認識前端路由路徑配置 try_files $uri $uri/ /index.html
刷新白屏(資源 404)VITE_PUBLIC_PATH = ./ 相對路徑在非根 URL 下解析錯誤改為 VITE_PUBLIC_PATH = / 使用絕對路徑

兩個問題獨立存在,必須同時解決。實際排查時,往往先修了 Nginx 發(fā)現(xiàn)還是白屏,再去查資源請求路徑,才發(fā)現(xiàn)是打包配置的問題。

以上就是Vue3+Vite+Nginx部署后刷新404白屏問題的完整排查指南的詳細內容,更多關于Vue3 Vite Nginx部署后刷新404白屏的資料請關注腳本之家其它相關文章!

相關文章

  • Vue中使用create-keyframe-animation與動畫鉤子完成復雜動畫

    Vue中使用create-keyframe-animation與動畫鉤子完成復雜動畫

    這篇文章主要介紹了Vue中使用create-keyframe-animation與動畫鉤子完成復雜動畫,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-04-04
  • vue之this.$router.push頁面刷新問題

    vue之this.$router.push頁面刷新問題

    這篇文章主要介紹了vue之this.$router.push頁面刷新問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • vue3+vant4封裝日期時間組件方式(年月日時分秒)

    vue3+vant4封裝日期時間組件方式(年月日時分秒)

    這篇文章主要介紹了vue3+vant4封裝日期時間組件方式(年月日時分秒),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • vue+vant實現(xiàn)商品列表批量倒計時功能

    vue+vant實現(xiàn)商品列表批量倒計時功能

    這篇文章主要介紹了vue+vant實現(xiàn)商品列表批量倒計時功能,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-01-01
  • 在Vue3項目中使用VueCropper裁剪組件實現(xiàn)裁剪及預覽效果

    在Vue3項目中使用VueCropper裁剪組件實現(xiàn)裁剪及預覽效果

    這篇文章主要介紹了在Vue3項目中使用VueCropper裁剪組件(裁剪及預覽效果),本文分步驟結合實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-07-07
  • 一文秒懂vue-property-decorator

    一文秒懂vue-property-decorator

    這篇文章主要介紹了vue-property-decorator的簡單知識,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-08-08
  • axios中post請求json和application/x-www-form-urlencoded詳解

    axios中post請求json和application/x-www-form-urlencoded詳解

    Axios是專注于網絡數(shù)據(jù)請求的庫,相比于原生的XMLHttpRequest對象,axios簡單易用,下面這篇文章主要給大家介紹了關于axios中post請求json和application/x-www-form-urlencoded的相關資料,需要的朋友可以參考下
    2022-10-10
  • 基于VUE實現(xiàn)判斷設備是PC還是移動端

    基于VUE實現(xiàn)判斷設備是PC還是移動端

    這篇文章主要介紹了基于VUE實現(xiàn)判斷設備是PC還是移動端,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-07-07
  • Vue3中的pinia使用方法總結(建議收藏版)

    Vue3中的pinia使用方法總結(建議收藏版)

    Pinia是Vue的存儲庫,它允許您跨組件/頁面共享狀態(tài),Pinia的成功可以歸功于他管理存儲數(shù)據(jù)的獨特功,下面這篇文章主要給大家介紹了關于Vue3中pinia使用方法的相關資料,需要的朋友可以參考下
    2023-04-04
  • VUE事件處理之@click用法示例代碼

    VUE事件處理之@click用法示例代碼

    在Vue進行前端開發(fā)中事件處理是必不可少的功能,下面這篇文章主要給大家介紹了關于VUE事件處理之@click用法的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-05-05

最新評論

涟水县| 馆陶县| 饶平县| 白城市| 顺昌县| 乐山市| 民丰县| 利津县| 安溪县| 土默特右旗| 五莲县| 谷城县| 濮阳县| 叙永县| 修武县| 武邑县| 南木林县| 衡山县| 平遥县| 汶川县| 辉南县| 沾益县| 化德县| 威远县| 教育| 泗洪县| 岳池县| 碌曲县| 巫溪县| 花莲县| 五指山市| 康平县| 沅江市| 四川省| 荔波县| 竹北市| 乌拉特前旗| 都匀市| 沙雅县| 福海县| 临汾市|