Vue路由history模式解決404問(wèn)題的幾種方法
問(wèn)題背景:
vue-router 默認(rèn)是hash模式,使用url的hash來(lái)模擬一個(gè)完整的url,當(dāng)url改變的時(shí)候,頁(yè)面不會(huì)重新加載。但是如果我們不想hash這種以#號(hào)結(jié)尾的路徑時(shí)候的話,我們可以使用路由的history的模式。比如如下網(wǎng)址:使用hash模式的話,那么訪問(wèn)變成 http://localhost:8080/bank/page/count/#/ 這樣的訪問(wèn),如果路由使用 history的話,那么訪問(wèn)的路徑變成 如下:http://localhost:8080/bank/page/count 這樣的了;
不過(guò)history的這種模式需要后臺(tái)配置支持。比如:當(dāng)我們進(jìn)行項(xiàng)目的主頁(yè)的時(shí)候,一切正常,可以訪問(wèn),但是當(dāng)我們刷新頁(yè)面或者直接訪問(wèn)路徑的時(shí)候就會(huì)返回404,那是因?yàn)樵趆istory模式下,只是動(dòng)態(tài)的通過(guò)js操作window.history來(lái)改變?yōu)g覽器地址欄里的路徑,并沒(méi)有發(fā)起http請(qǐng)求,但是當(dāng)我直接在瀏覽器里輸入這個(gè)地址的時(shí)候,就一定要對(duì)服務(wù)器發(fā)起http請(qǐng)求,但是這個(gè)目標(biāo)在服務(wù)器上又不存在,所以會(huì)返回404
怎么解決呢?我們現(xiàn)在可以把所有請(qǐng)求都轉(zhuǎn)發(fā)到 http://localhost:8080/bank/page/index.html上就可以了。
解決方案:
對(duì)于VUE的router[mode: history]模式在開(kāi)發(fā)的時(shí)候,一般都不出問(wèn)題。是因?yàn)殚_(kāi)發(fā)時(shí)用的服務(wù)器為node,Dev環(huán)境中自然已配置好了。
但對(duì)于放到nginx下運(yùn)行的時(shí)候,自然還會(huì)有其他注意的地方。總結(jié)如下:
在nginx里配置了以下配置后, 可能首頁(yè)沒(méi)有問(wèn)題,但鏈接其他會(huì)出現(xiàn)(404)
location / { root D:\Test\exprice\dist; index index.html index.htm; try_files $uri $uri/ /index.html; add_header 'Access-Control-Allow-Origin' '*'; add_header 'Access-Control-Allow-Credentials' 'true'; add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS'; add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type'; } location ^~/api/ { proxy_pass http://39.105.109.245:8080/; }
為了解決404,需要通過(guò)以下兩種方式:
1、官網(wǎng)推薦
location / { root D:\Test\exprice\dist; index index.html index.htm; try_files $uri $uri/ /index.html;
2、匹配errpr_page
location /{ root /data/nginx/html; index index.html index.htm; error_page 404 /index.html; }
3、 (vue.js官方教程里提到的https://router.vuejs.org/zh-cn/essentials/history-mode.html)
server { listen 8888;#默認(rèn)端口是80,如果端口沒(méi)被占用可以不用修改 server_name localhost; root E:/vue/my_project/dist;#vue項(xiàng)目的打包后的dist location / { try_files $uri $uri/ @router;#需要指向下面的@router否則會(huì)出現(xiàn)vue的路由在nginx中刷新出現(xiàn)404 index index.html index.htm; } #對(duì)應(yīng)上面的@router,主要原因是路由的路徑資源并不是一個(gè)真實(shí)的路徑,所以無(wú)法找到具體的文件 #因此需要rewrite到index.html中,然后交給路由在處理請(qǐng)求資源 location @router { rewrite ^.*$ /index.html last; } #.......其他部分省略 }
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
vue+moment實(shí)現(xiàn)倒計(jì)時(shí)效果
這篇文章主要為大家詳細(xì)介紹了vue+moment實(shí)現(xiàn)倒計(jì)時(shí)效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-08-08詳解vue-router 2.0 常用基礎(chǔ)知識(shí)點(diǎn)之導(dǎo)航鉤子
本篇文章主要介紹了vue-router 2.0 常用基礎(chǔ)知識(shí)點(diǎn)之導(dǎo)航鉤子,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05element-ui中實(shí)現(xiàn)tree子節(jié)點(diǎn)部分選中時(shí)父節(jié)點(diǎn)也選中
這篇文章主要介紹了element-ui中實(shí)現(xiàn)tree子節(jié)點(diǎn)部分選中時(shí)父節(jié)點(diǎn)也選中的方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08Vue Element前端應(yīng)用開(kāi)發(fā)之前端API接口的封裝
對(duì)整個(gè)系統(tǒng)來(lái)說(shuō),一般會(huì)有很多業(yè)務(wù)對(duì)象,而每個(gè)業(yè)務(wù)對(duì)象的API接口又有很多。我們這個(gè)VUE+Element 前端應(yīng)用就是針對(duì)ABP框架的業(yè)務(wù)對(duì)象,因此前端的業(yè)務(wù)對(duì)象接口也是比較統(tǒng)一的,那么可以考慮在前端中對(duì)后端API接口調(diào)用進(jìn)行封裝,引入ES6的方式進(jìn)行前端API的抽象簡(jiǎn)化。2021-05-05Vue2.0設(shè)置全局樣式(less/sass和css)
這篇文章主要為大家詳細(xì)介紹了Vue2.0設(shè)置全局樣式(less/sass和css),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-11-11解決Antd Table組件表頭不對(duì)齊的問(wèn)題
這篇文章主要介紹了解決Antd Table組件表頭不對(duì)齊的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-10-10使用vue打包進(jìn)行云服務(wù)器上傳的問(wèn)題
這篇文章主要介紹了使用vue打包進(jìn)行云服務(wù)器上傳,本文給大家介紹的非常詳細(xì),對(duì)大家的工作或?qū)W習(xí)具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-03-03