vue部署到線上為啥會(huì)出現(xiàn)404的原因分析及解決
將 Vue 項(xiàng)目部署到線上后出現(xiàn) 404 錯(cuò)誤,通常是由于 路由配置、服務(wù)器設(shè)置或資源路徑問題 導(dǎo)致的。
以下是常見原因及解決方案:
1. 前端路由(history 模式)未配置服務(wù)器支持
問題原因
Vue 默認(rèn)使用 hash 模式(URL 帶 #),但若使用 history 模式(無 # 的 URL),刷新頁面時(shí)服務(wù)器會(huì)嘗試匹配該路徑,但實(shí)際不存在對(duì)應(yīng)的文件,導(dǎo)致 404。
示例:
訪問 https://example.com/user/123,服務(wù)器會(huì)查找 /user/123/index.html,但 Vue 是單頁應(yīng)用(SPA),所有路由應(yīng)由前端處理。
解決方案
方案 1:配置服務(wù)器重定向到 index.html
確保所有請(qǐng)求都返回 index.html,由 Vue Router 接管路由。
- Nginx 配置:
location / {
try_files $uri $uri/ /index.html;
}- Apache 配置(
.htaccess):
RewriteEngine On
RewriteBase /
RewriteRule ^index\.html$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.html [L]- Netlify/Vercel:
在部署設(shè)置中指定 rewrites 規(guī)則,指向 index.html。
方案 2:改用 hash 模式
在 Vue Router 中強(qiáng)制使用 hash 模式:
const router = new VueRouter({
mode: 'hash', // 默認(rèn)是 'history'
routes: [...]
});2. 靜態(tài)資源路徑錯(cuò)誤(JS/CSS 404)
問題原因
打包后的資源路徑錯(cuò)誤,瀏覽器無法加載 JS/CSS 文件。
常見于項(xiàng)目部署在子目錄(如 https://example.com/subdir/),但靜態(tài)資源引用的是絕對(duì)路徑。
解決方案
修改 vue.config.js,設(shè)置正確的 publicPath:
module.exports = {
publicPath: process.env.NODE_ENV === 'production' ? '/your-subdir/' : '/'
};- 如果部署在根目錄,用
publicPath: '/'; - 如果部署在子目錄(如
/subdir/),用publicPath: '/subdir/'。
檢查打包后的 index.html
確保引用的 JS/CSS 路徑正確,例如:
<script src="/subdir/js/app.123456.js"></script>
3. 服務(wù)器未正確配置 MIME 類型
問題原因
服務(wù)器未正確返回 .js、.css 等文件的 MIME 類型,導(dǎo)致瀏覽器拒絕加載。
解決方案
- Nginx 配置:
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
expires 1y;
add_header Cache-Control "public";
try_files $uri =404;
}- Apache 配置:確保
.htaccess包含:
AddType application/javascript js AddType text/css css
4. 部署目錄結(jié)構(gòu)錯(cuò)誤
問題原因
- 打包后的
dist文件夾內(nèi)容未完整上傳到服務(wù)器。 - 服務(wù)器根目錄未指向
dist文件夾。
解決方案
- 確保上傳的是
dist內(nèi)的所有文件(而非dist文件夾本身)。 - 檢查服務(wù)器配置的根目錄是否正確:
server {
root /path/to/your/dist;
index index.html;
}5. 瀏覽器緩存問題
問題原因
- 舊版本緩存導(dǎo)致加載異常。
解決方案
- 強(qiáng)制刷新頁面(
Ctrl + F5或Cmd + Shift + R)。 - 在文件名中添加哈希(Vue CLI 默認(rèn)已配置):
// vue.config.js
module.exports = {
filenameHashing: true // 默認(rèn)開啟
};總結(jié)排查步驟
- 檢查服務(wù)器路由配置(History 模式需重定向到
index.html)。 - 驗(yàn)證靜態(tài)資源路徑(
publicPath是否正確)。 - 查看瀏覽器控制臺(tái)(Network 面板確認(rèn)哪些文件返回 404)。
- 檢查服務(wù)器日志(如 Nginx 的
error.log)。 - 清除緩存或使用無痕模式 測(cè)試。
如果問題仍未解決,可以提供具體的 部署環(huán)境(Nginx/Apache/Netlify 等) 和 錯(cuò)誤日志,進(jìn)一步分析!
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
VUE3.2項(xiàng)目使用Echarts5.4詳細(xì)步驟總結(jié)
Vue3.2是一款非常流行的JavaScript框架,它讓在前端領(lǐng)域開發(fā)變得更加的便捷,下面這篇文章主要給大家介紹了關(guān)于VUE3.2項(xiàng)目使用Echarts5.4的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-06-06
Vue實(shí)現(xiàn)項(xiàng)目通用配置環(huán)境管理詳解
這篇文章主要為大家詳細(xì)介紹了Vue實(shí)現(xiàn)項(xiàng)目通用配置環(huán)境管理的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-03-03
vue-element-admin后臺(tái)生成動(dòng)態(tài)路由及菜單方法詳解
vue-element-admin后臺(tái)管理系統(tǒng)模板框架 是vue結(jié)合element-ui一體的管理系統(tǒng)框架,下面這篇文章主要給大家介紹了關(guān)于vue-element-admin后臺(tái)生成動(dòng)態(tài)路由及菜單的相關(guān)資料,需要的朋友可以參考下2023-09-09
vue實(shí)現(xiàn)商品詳情頁功能之商品選項(xiàng)卡
這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)商品詳情頁功能之商品選項(xiàng)卡,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-04-04
使用vue-router設(shè)置每個(gè)頁面的title方法
下面小編就為大家分享一篇使用vue-router設(shè)置每個(gè)頁面的title方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-02-02
vue 中常用操作數(shù)組的方法(forEach()和reduce())
文章介紹了JavaScript中常用的操作數(shù)組方法,包括forEach()和reduce(),forEach()用于遍歷數(shù)組并對(duì)每個(gè)元素執(zhí)行操作,而reduce()則用于遍歷數(shù)組并進(jìn)行累加等迭代操作,感興趣的朋友一起看看吧2025-03-03
解決vue+ element ui 表單驗(yàn)證有值但驗(yàn)證失敗問題
這篇文章主要介紹了vue+ element ui 表單驗(yàn)證有值但驗(yàn)證失敗,本文通過實(shí)例代碼給大家分享解決方案,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-01-01

