原文連接:https://www.cnblogs.com/mica/p/10876822.html
一、hash ——即地址欄URL中的#符號。
hash 雖然出現URL中,但不會被包含在HTTP請求中,對後端徹底沒有影響,所以改變hash不會從新加載頁面。
二、history ——利用了HTML5 History Interface 中新增的pushState() 和replaceState() 方法。須要特定瀏覽器支持
history模式,會出現404 的狀況,須要後臺配置。
三、hash模式下,僅hash符號以前的內容會被包含在請求中,如 http://www.baidu.com, 所以對於後端來講,即便沒有作到對路由的全覆蓋,也不會返回404錯誤;
history模式下,前端的url必須和實際向後端發起請求的url 一致,如http://www.baidu.com/a/ 。若是後端缺乏對/a 的路由處理,將返回404錯誤。html
const router = new VueRouter({ mode: 'history', routes: [...] })
history模式下配置nginx前端
location / { try_files $uri $uri/ /index.html; }
history模式下配置Apachenginx
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.html$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.html [L] </IfModule>
history模式下配置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) })