vue-router的HTML5 History 模式設置

VUE是當下最火爆的前端框架之一,vue-router是vue項目中幾乎都會用到的組件,然而體驗一時爽,其實坑很多。本篇經驗將詳細介紹vue-router的兩種mode效果和開發測試環境下的問題,並給出解決方案。html

vue-router的HTML5 History 模式,這種模式充分利用 history.pushState API 來完成 URL 跳轉而無須從新加載頁面。前端

const router = new VueRouter({
 mode: 'history',
 routes: [...]
})

當你使用 history 模式時,URL 就像正常的 url,例如 http://yoursite.com/user/id, 就是長這樣的!vue

不過這種模式要玩好,還須要後臺配置支持。由於咱們的應用是個單頁客戶端應用,若是後臺沒有正確的配置,當用戶在瀏覽器直接訪問 http://oursite.com/user/id 就會返回 404,這就尷尬了。nginx

因此,你要在服務端增長一個覆蓋全部狀況的候選資源:若是 URL 匹配不到任何靜態資源,則應該返回同一個 index.html 頁面,這個頁面就是你 app 依賴的頁面。vue-router

目先後端服務器有Apache、nginx、原生 Node.js、基於 Node.js 的 Express、Internet Information Services (IIS)、Caddy、Firebase 主機等。後端

先給一個官方標準版配置的傳送門,請戳這裏→ https://router.vuejs.org/zh/guide/essentials/history-mode.html瀏覽器

既然是官方給出的配置,那確定就會說的很官方咯~前端框架

按照官方給出的示例,將道理是成功的,可是官方給出的只侷限於這個項目在服務器的根目錄下! 若是你的項目沒有放在根目錄下,那麼就是這麼的不講道理。服務器

下面是在實際開發中碰到的問題。app

咱們的後端服務器是nginx,因此按照官方的給出的配置,找到nginx.conf,照抄代碼,修改完後重啓服務器,講道理是成功的。

server
{
  listen 80;
  server_name oursite.com;
  location /test/ {      
    alias /usr/local/test/;
    index index.htm index.html;
    #上面的就是一些常規配置,下面這個纔是重點
    try_files $uri $uri/ /index.html;
 
    #這裏沒有采用官方給出處理404錯誤頁面的方案
    #方案一(把全部沒有後綴名的請求若是404都跳轉到index.html,咱們沒有采用)
    #error_page 404 /test/index.html;
 
    #方案二(404的方式,不是特別完美。會有瀏覽器留下404的狀態(容易被第三方劫持),如下方式能夠避免被第三方劫持!)
    if (!-e $request_filename) {
      rewrite ^/(.*) /test/index.html last;
      break;
    }//前端全棧學習交流圈:866109386
  }//幫助1-3年前端人員
}//突破技術瓶頸,提高思惟能力

可是,事實就是這麼的不講道理,咱們並無成功!這就使人非常鬱悶了,心中一萬隻神獸羊駝,奔騰而過~ 爲何沒有成功呢,都是循序漸進作的呀,徹底不講道理!

而真相只有一個,那就是~~~

路由文件中的路徑有問題

const router = new VueRouter({
 mode: 'history',
 routes: [
  { path: '/test/', component: YourComponent },
  { path: '/test/a', component: YourComponent },
  { path: '/test/b:x', component: YourComponent }
 ]
})

在路由文件中全部的路徑前面加上服務器下項目所在的文件名便可,固然也包括<router-link>和this.$router.push()中的路徑,否則又是不講道理的。

這只是在nginx服務器下的一種解決方案,至於別的服務器應該也是同理的。

相關文章
相關標籤/搜索