VUE的history模式下除了index外其他路由404報錯解決辦法
我們先來看下代碼:
location / { index index.html; root /dist; try_files $uri $uri/ /index.html; }
try_files首先會判斷他是文件,還是一個目錄,結果發(fā)現(xiàn)他是文件,與第一個參數(shù) $uri變量匹配。
然后去到網(wǎng)站目錄下去查找文件是否存在,如果存在直接讀取返回。如果不存在直接跳轉(zhuǎn)到第三個參數(shù).
現(xiàn)在不明白的是既然跳到了index為什么顯示的還是路由后的界面
內(nèi)容擴展:
問題背景:
vue-router 默認是hash模式,使用url的hash來模擬一個完整的url,當url改變的時候,頁面不會重新加載。但是如果我們不想hash這種以#號結尾的路徑時候的話,我們可以使用路由的history的模式。比如如下網(wǎng)址:使用hash模式的話,那么訪問變成 http://localhost:8080/bank/page/count/#/ 這樣的訪問,如果路由使用 history的話,那么訪問的路徑變成 如下:http://localhost:8080/bank/page/count 這樣的了;
不過history的這種模式需要后臺配置支持。比如:當我們進行項目的主頁的時候,一切正常,可以訪問,但是當我們刷新頁面或者直接訪問路徑的時候就會返回404,那是因為在history模式下,只是動態(tài)的通過js操作window.history來改變?yōu)g覽器地址欄里的路徑,并沒有發(fā)起http請求,但是當我直接在瀏覽器里輸入這個地址的時候,就一定要對服務器發(fā)起http請求,但是這個目標在服務器上又不存在,所以會返回404
怎么解決呢?我們現(xiàn)在可以把所有請求都轉(zhuǎn)發(fā)到 http://localhost:8080/bank/page/index.html上就可以了。
解決方案:
對于VUE的router[mode: history]模式在開發(fā)的時候,一般都不出問題。是因為開發(fā)時用的服務器為node,Dev環(huán)境中自然已配置好了。
但對于放到nginx下運行的時候,自然還會有其他注意的地方??偨Y如下:
在nginx里配置了以下配置后, 可能首頁沒有問題,但鏈接其他會出現(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,需要通過以下兩種方式:
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、
server { listen 8888;#默認端口是80,如果端口沒被占用可以不用修改 server_name localhost; root E:/vue/my_project/dist;#vue項目的打包后的dist location / { try_files $uri $uri/ @router;#需要指向下面的@router否則會出現(xiàn)vue的路由在nginx中刷新出現(xiàn)404 index index.html index.htm; } #對應上面的@router,主要原因是路由的路徑資源并不是一個真實的路徑,所以無法找到具體的文件 #因此需要rewrite到index.html中,然后交給路由在處理請求資源 location @router { rewrite ^.*$ /index.html last; } #.......其他部分省略 }
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
解決vscode進行vue格式化,會自動補分號和雙引號的問題
這篇文章主要介紹了解決vscode進行vue格式化,會自動補分號和雙引號的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-10-10詳解vue中使用axios對同一個接口連續(xù)請求導致返回數(shù)據(jù)混亂的問題
這篇文章主要介紹了詳解vue中使用axios對同一個接口連續(xù)請求導致返回數(shù)據(jù)混亂的問題,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-11-11vue中使用過濾器filters的this為undefined的問題
這篇文章主要介紹了vue中使用過濾器filters的this為undefined的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-01-01