Vue Router HTML5 History 模式

vue-router 默認 hash 模式 —— 使用 URL 的 hash 來模擬一個完整的 URL墩剖,于是當 URL 改變時碎捺,頁面不會重新加載箱歧。

如果不想要很丑的 hash炎功,我們可以用路由的 history 模式凤薛,這種模式充分利用 history.pushState API 來完成 URL 跳轉而無須重新加載頁面姓建。

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

當你使用 history 模式時,URL 就像正常的 url枉侧,例如 http://yoursite.com/user/id引瀑,也好看!

不過這種模式要玩好榨馁,還需要后臺配置支持憨栽。因為我們的應用是個單頁客戶端應用,如果后臺沒有正確的配置翼虫,當用戶在瀏覽器直接訪問 http://oursite.com/user/id 就會返回 404屑柔,這就不好看了。

所以呢珍剑,你要在服務端增加一個覆蓋所有情況的候選資源:如果 URL 匹配不到任何靜態(tài)資源掸宛,則應該返回同一個 index.html 頁面,這個頁面就是你 app 依賴的頁面招拙。

后端配置例子

Apache

  <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index\.html$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.html [L]
  </IfModule>

除了 mod_rewrite唧瘾,你也可以使用 FallbackResource措译。

nginx

  location / {
    try_files $uri $uri/ /index.html;
  }

原生 Node.js

  const http = require('http')
  const fs = require('fs')
  const httpPort = 80

  http.createServer((req, res) => {
    fs.readFile('index.htm', 'utf-8', (err, content) => {
      if (err) {
        console.log('We cannot open "index.htm" file.')
      }

      res.writeHead(200, {
        'Content-Type': 'text/html; charset=utf-8'
     })

      res.end(content)
    })
  }).listen(httpPort, () => {
    console.log('Server listening on: http://localhost:%s', httpPort)
  })

基于 Node.js 的 Express

對于 Node.js/Express,請考慮使用 connect-history-api-fallback 中間件饰序。

Internet Information Services (IIS)

  1. 安裝 IIS UrlRewrite
  2. 在你的網(wǎng)站根目錄中創(chuàng)建一個 web.config 文件领虹,內(nèi)容如下:
  <?xml version="1.0" encoding="UTF-8"?>
  <configuration>
    <system.webServer>
      <rewrite>
        <rules>
          <rule name="Handle History Mode and custom 404/500" stopProcessing="true">
            <match url="(.*)" />
            <conditions logicalGrouping="MatchAll">
              <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
              <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
            </conditions>
            <action type="Rewrite" url="/" />
          </rule>
        </rules>
      </rewrite>
    </system.webServer>
  </configuration>

Caddy

  rewrite {
    regexp .*
    to {path} /
  }

Firebase 主機

在你的 firebase.json 中加入:

  {
    "hosting": {
      "public": "dist",
      "rewrites": [
        {
          "source": "**",
          "destination": "/index.html"
        }
      ]
    }
  }

警告

給個警告,因為這么做以后求豫,你的服務器就不再返回 404 錯誤頁面塌衰,因為對于所有路徑都會返回 index.html 文件。為了避免這種情況蝠嘉,你應該在 Vue 應用里面覆蓋所有的路由情況最疆,然后在給出一個 404 頁面。

const router = new VueRouter({
  mode: 'history',
  routes: [
    { path: '*', component: NotFoundComponent }
  ]
})

或者蚤告,如果你使用 Node.js 服務器努酸,你可以用服務端路由匹配到來的 URL,并在沒有匹配到路由的時候返回 404罩缴,以實現(xiàn)回退蚊逢。更多詳情請查閱 Vue 服務端渲染文檔

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末箫章,一起剝皮案震驚了整個濱河市烙荷,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌檬寂,老刑警劉巖终抽,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異桶至,居然都是意外死亡昼伴,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進店門镣屹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來圃郊,“玉大人,你說我怎么就攤上這事女蜈〕钟撸” “怎么了?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵伪窖,是天一觀的道長逸寓。 經(jīng)常有香客問我,道長覆山,這世上最難降的妖魔是什么竹伸? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮簇宽,結果婚禮上勋篓,老公的妹妹穿的比我還像新娘吧享。我一直安慰自己,他們只是感情好譬嚣,可當我...
    茶點故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布耙蔑。 她就那樣靜靜地躺著,像睡著了一般孤荣。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上须揣,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天盐股,我揣著相機與錄音,去河邊找鬼耻卡。 笑死疯汁,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的卵酪。 我是一名探鬼主播幌蚊,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼溃卡!你這毒婦竟也來了溢豆?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤瘸羡,失蹤者是張志新(化名)和其女友劉穎漩仙,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體犹赖,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡队他,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了峻村。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片麸折。...
    茶點故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖粘昨,靈堂內(nèi)的尸體忽然破棺而出垢啼,到底是詐尸還是另有隱情,我是刑警寧澤雾棺,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布膊夹,位于F島的核電站,受9級特大地震影響捌浩,放射性物質(zhì)發(fā)生泄漏放刨。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一尸饺、第九天 我趴在偏房一處隱蔽的房頂上張望进统。 院中可真熱鬧助币,春花似錦、人聲如沸螟碎。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽掉分。三九已至俭缓,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間酥郭,已是汗流浹背华坦。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留不从,地道東北人惜姐。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像椿息,于是被迫代替她去往敵國和親歹袁。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,472評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 介紹 vue-router是一個vue插件寝优。其實質(zhì)是在location.hash条舔、location.replace...
    AmazRan閱讀 1,543評論 0 6
  • 一、前言 要學習vue-router就要先知道這里的路由是什么乏矾?為什么我們不能像原來一樣直接用 標簽編寫鏈接哪逞刷?...
    浪里行舟閱讀 67,651評論 12 204
  • 隨著前端應用的業(yè)務功能起來越復雜,用戶對于使用體驗的要求越來越高妻熊,單面(SPA)成為前端應用的主流形式夸浅。大型單頁應...
    bayi_lzp閱讀 5,690評論 0 2
  • 一、概念闡述 對于 Vue 這類漸進式前端開發(fā)框架扔役,為了構建 SPA(單頁面應用)帆喇,需要引入前端路由系統(tǒng),這也就是...
    frog78閱讀 7,096評論 0 6
  • 用vue-cli開發(fā)的項目在開發(fā)完打包之后想在本地預覽要怎么做呢亿胸?這里要根據(jù)你的路由模式來分兩種情況 1. his...
    liwuwuzhi閱讀 13,298評論 6 16