問題出現原因:
1.在history模式下的404空白
2.在history模式下存在多級路由時,頁面路由跳轉是ok的,但當二級以上路由時,瀏覽器直接刷新頁面會空白
先說解決方案:
1.在history模式下的404空白 * 后台或者nignx服務器發現404時,直接重定向到index.html就可以解決
2.在history模式下存在多級路由時,頁面路由跳轉是ok的,但當二級以上路由時,瀏覽器直接刷新頁面會空白 * 如果你是老的vue項目,找到publicPath:""改成publicPath:"/" * 如果你是最新的vue腳手架搭建的,在項目中找到這個文件node_modules/@vue/cli-service/lib/options.js,然后把里面的baseUrl:""改成baseUrl:"/"就可以了 備注:修改完配置記得重新啟動下開發模式 ?
原因:
1.在history模式下的404空白 * 這種網上已經說了很多了,你在history模式下時,你會發現這種url方式你直接回車,它是會以http get方式請求后台,但是后台沒有你這個請求路徑,所以會報404,而這個路徑是前台自己定義的,所以要由前台處理,因為vue單頁面應用,所以它只有一個頁面index.html,所以一旦后台或者nignx 404了,就讓它重定向到index.html,這樣前台獲取了這個路徑,它就會根據自己路由來處理了
2.在history模式下存在多級路由時,頁面路由跳轉是ok的,但當二級以上路由時,瀏覽器直接刷新頁面會空白 * 當二級以上路由刷新時,瀏覽器控制台只會報錯誤,沒有具體原因,這時你看network中靜態資源請求,如果你的二級路由是“/system/permisson”,這時你會發現靜態資源請求路徑變成了”/system/app.js“,而靜態資源實際上是“/app.js”才能找到,這是因為靜態資源訪問路徑是按照相對路徑訪問的,你的路由如果是“/A/B/C”,靜態資源加載路徑就是/A/B/app.js * 這時候可能疑惑,我根本沒設置過這個路徑,那是因為webpack配置上給你設置了。
a.如果是vue老項目,你找配置文件中的publicPath這個屬性,會發現是publicPath:""空字符串,所有的靜態資源把publicPath路徑組合起來相當於“./app.js”,這時我們需要把這里改成publicPath:"/",所有的靜態資源把publicPath路徑組合起來相當於“/app.js”,從根路徑開始,這樣無論你在幾級路由,都是從根路徑加載
b.如果你是新的vue項目,你會發現沒有配置publicPath的地方,因為新的vue項目publicPath是獲取baseUrl字段的值,所以在這個路徑下node_modules/@vue/cli-service/lib/options.js把baseUrl:""改成baseUrl:"/" ?
注意:hash模式下,可能需要改成相對路徑,目前我沒測試過。