vue hash模式轉為history模式(二級路由)


1.

2.

 3.后台修改

vue的路由在默認的hash模式下,默認打包一般不會有什么問題,不過hash模式由於url會帶有一個#,不美觀,而且在微信分享,授權登錄等都會有一些坑.所以history模式也會有一些應用場景.新手往往會碰到history模式打包后頁面一片空白的情況,而且沒有資源加載錯誤的報錯信息.

這個其實仔細研究下會發現,如果項目直接放的跟目錄, 那么是沒有問題的,如果是子目錄,那么就會一片空白了.這個vue官方有解釋,需要加一個base

?
1
2
// base: '/history',
// mode: 'history',

這個base即為項目路徑.

以上兩個都解決了,還是會發現,此時只有首頁能訪問,通過首頁點進去其他路由也是可以的,但是如果在其他路由刷新就有錯誤了,這個懂history模式的也應該知道,history模式是h5 api的 history.pushState,相對於是瀏覽器模擬了一條歷史,而真正服務器上沒有這個路徑資源,為什么hash模式不存在這個問題呢?hash模式是帶#,這個服務器不會解析,相對於還是返回html而已,index.html會根據vue路由去解析,而history模式則會請求服務器上的此地址,服務器上沒有相關路徑就會報錯了,vue-router的官方文檔有介紹各種配置,比如ngnix的配置

?
1
2
3
location / {
  try_files $uri $uri/ /index .html;
}

上面這個對於直接項目的根目錄是可以的,但是如果項目不是根目錄還是會有問題,

?
1
2
3
4
5
6
7
8
9
location /history {
    root C: /web/static ;
  index index.html index.htm;
  #error_page 404 /history/index.html;
  if (!-e $request_filename) {
   rewrite ^/(.*) /history/index .html last;
   break ;
  }
}

上面這個是項目路徑名為history,這樣配置后就不會有vue打包后頁面空白問題了,history路由也可以自由訪問了,不過要記得上面說的,非根目錄的項目需要加上base 的路徑




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM