Vue router給我們提供了兩種路由模式,分別是hash模式和history模式。其中預設是使用hash模式,即URL中帶有一個#符號,但是處於業務或個人喜愛的差別,Vue router也提供了history模式。但是由於Vue是單頁SPA應用,所以每個路由並沒有對應的html檔案。
- 首先我們需要建立一個Vue專案
- 安裝Vue Router
npm i vue-router
- 在Vue專案中設定Vue Router使用history模式
import Vue from 'vue';
import VueRouter from 'vue-router';
Vue.use(VueRouter);
const router = new VueRouter({
mode: 'history',
routes: [
// 路由設定
]
});
export default router;
server {
listen 80;
server_name your_domain.com;
root /path/to/your/vue_app/dist;
index index.html;
location / {
try_files $uri $uri/ /index.html;
}
}
# 在以上設定中,需要進行以下調整:
# 1. server_name:將your_domain.com替換為您的域名。
# 2. root:將/path/to/your/vue_app/dist替換為您的Vue應用的編譯輸出目錄。
# 3. index:確保index.html是您的Vue應用的入口頁面。
# 設定解釋:
# • location /:此處表示對所有的請求都生效。
# • try_files $uri $uri/ /index.html:當請求的檔案或目錄不存在時,將請求重定向到index.html。這使得所有的路由請求都指向了Vue應用的入口頁面,使得應用能夠正確地處理動態路由。
// 在路由設定中定義一個名為NotFound的路由
const routes = [
// 其他路由設定...
{ path: '/404', name: 'NotFound', component: NotFoundComponent },
{ path: '*', redirect: '/404' }
]
// 建立Vue Router範例並將路由設定應用於它
const router = new VueRouter({
mode: 'history',
routes
})
// 導航守衛用於捕獲404錯誤
router.beforeEach((to, from, next) => {
// 如果目標路由不存在,重定向到404頁面
if (to.matched.length === 0) {
next('/404');
} else {
next();
}
})
如果你希望你的Vue應用打完包以後,所有路由的字首都加上/v1/test,那麼你需要對原有的設定做一下修改
publicPath這裡需要判斷一下是否為生產環境,如果是生產環境,我們需要加上字首,這樣在讀取js、css等檔案時才能存取到正確的路徑。如果是開發環境,基本URL設定為'/'即可。在開發環境中,我們的應用通常執行在一個原生的開發伺服器上(例如:localhost:8080),而不是真實的生產環境伺服器(例如:https://www.example.com)。因此,'/'
可以作為根路徑來存取我們的應用,而不需要新增任何字首。
module.exports = {
// 部署應用包的基本URL
publicPath: process.env.NODE_ENV === 'production' ? '/v1/test/' : '/',
devServer: {
port: 8080,
open: true,
proxy: {}
}
}
server {
listen 80;
server_name your_domain.com;
root /path/to/your/vue_app/dist;
index index.html;
location /v1/test { # 這裡location需要加上/v1/test
try_files $uri $uri/ /index.html;
}
}