首發於個人github博客, 歡迎關注html
場景描述:前端
www.abc.com
, 以後點擊界面裏面的logout
,前端路由處理,跳轉到www.abc.com/login
/login
的時候,沒有報404?/login
邏輯:this.$router.push({name: 'login'});
貼下前端路由配置linux
routes: [
{
name: 'home',
path: '/',
component: Home,
meta: { requiresAuth: true },
},
{
path: '/login',
name: 'login',
component: Login,
},
{
path: '*',
component: NotFound,
}
]複製代碼
現有nginx配置nginx
location / {
root: /var/data/static;
}複製代碼
解決:git
爲什麼點擊退出能夠正常顯示登陸頁面?github
由於點擊退出,使用的redirect是前端路由
this.$router.push({name: 'login'});
來實現的,這時候已經有index.html 和相關的js了,能夠直接使用前端路由跳轉到/login
路由對應的組件瀏覽器
爲什麼刷新的時候顯示: nginx/404?bash
- 由於刷新的時候,會先向服務器請求xxxx.com/login,
- 這時候服務器的nginx配置中沒有關於/login路徑的配置,直接報nginx/404的錯誤
如何解決? 服務器
在nginx的
location /{root xxxpath}
中添加try_file: /index.html
的配置ui
解釋:
- nginx進行匹配路徑的時候,發現沒有
/login
的路徑,便會轉到/
路徑處理。- 發現
root
路徑下(是靜態文件的root目錄,不是linux的root目錄)沒有login
文件,就會try_file
規則,返回index.html,- 這樣瀏覽器拿到index.html 以後,開始加載其中的前端路由部分
- 這時候/login就會在前端路由中找到匹配規則。
同理/404
也能夠寫在前端路由中了