關于vue項目部署后刷新網(wǎng)頁報404錯誤解決
我的項目,前端是vue項目在部署之后可以正常訪問,流程沒有問題,可是刷新之后瀏覽器會返回404錯誤。
部署使用的是nginx,經(jīng)常用來部署項目,所以容器肯定沒有問題,
這種問題在我直接啟動時并沒有出現(xiàn)過,所以可以猜測是打包時出現(xiàn)的問題,
報404錯誤說明是路由的問題
vue管理路由的是"router" 目標明確了,去找router的配置文件
import Vue from 'vue' import Router from 'vue-router' Vue.use(Router) /* Layout */ import Layout from '@/layout' // 公共路由 export const constantRoutes = [ ........ ] // 動態(tài)路由,基于用戶權限動態(tài)去加載 export const dynamicRoutes = [ ........ ] export default new Router({ mode: 'history', scrollBehavior: () => ({ y: 0 }), routes: constantRoutes })
公共路由與動態(tài)路由不會有錯,不然這個bug是撐不到部署才出現(xiàn),只能是下方的初始化路由時出的問題。
看這句話:
mode: 'history',
router有兩種模式
1.hash模式:原理是onhashchange事件 請求中是在hash值之前的內(nèi)容,所以請求始終是有效的,如請求的是http://www.baidu.com/123456,只需要有http://www.baidu.com的路由就不會出現(xiàn)404錯誤所以改成這個就不會出現(xiàn)404錯誤。
2.history模式:原理是利用了h5的Interface 中的pushState()方法和replaceState()方法,它們提供了對瀏覽器歷史記錄進行修改的功能,但當它們執(zhí)行修改時,雖然改變了當前的 URL,但瀏覽器不會立即向后端發(fā)送請求。所以就造成了客戶端的URL和服務器請求的url不一致,才出現(xiàn)的url錯誤。
所以:
mode: 'hash',
成功解決
可是還有個問題:
這樣的話history模式的同步更新瀏覽器歷史記錄功能就沒有了,這肯定不行
所以我想到history模式出現(xiàn)404無非是因為客戶端的URL和服務器請求的url不一致導致的,我們可以在服務器訪問受限時指定一個登記過的全局路由,就是首頁面,這樣就可以通過路由的檢測,從而達到hash模式的效果了,所以要在nginx.config中修改:
重啟nginx,測試沒問題,解決。
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
element ui 表格動態(tài)列顯示空白bug 修復方法
今天小編就為大家分享一篇element ui 表格動態(tài)列顯示空白bug 修復方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-09-09VUE 項目在IE11白屏報錯 SCRIPT1002: 語法錯誤的解決
這篇文章主要介紹了VUE 項目在IE11白屏報錯 SCRIPT1002: 語法錯誤的解決,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-09-09elementplus?card?懸浮菜單的實現(xiàn)
本文主要介紹了elementplus?card?懸浮菜單的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-07-07