美文网首页
Vue与Nginx路由静态文件冲突的问题

Vue与Nginx路由静态文件冲突的问题

作者: 7ColorLotus | 来源:发表于2020-06-17 16:07 被阅读0次
    1. Vue有自己的路由,Nginx 也有自己的路由,当冲突的时候,即客户端访问Nginx配置的路由出问题的时候可以使用Nginx的rewrite方法,当无法找到资源目录的时候跳转到Vue路由的固定页面(一般是index),配置如下:
    ## 示例路径:  https://www.7colorlotus.net/manage/index
    
    location ^~ /manage {
      alias   /data/www/manage;
      if (!-e $request_filename) { # 当找不到资源时
           rewrite ^/(.*)/(.*)  /$1/index.html last;
           break;
      }
    }
    
    1. 上面的示例代码,可以解决一般vue路由问题,但是如果一个vue项目,既有一级路由目录,也有二级路由目录时,上面的配置方案会导致在访问二级目录时出问题,这个问题,就是rewrite后面的正则表达式问题,他们不能既匹配一级路由目录也不能匹配路由目录,可以采用如下方式匹配:
    ## 示例路径:  https://www.7colorlotus.net/manage/label/order_list
    
    location ^~ /manage {
        alias   /data/www/manage;
        if (!-e $request_filename) { # 当找不到资源时
             rewrite ^/(.*)/(.*)  /$1/index.html;  # 匹配vue一级路由目录,注意后面没有last,下面没有break
        }
        if (!-e $request_filename) { # 当找不到资源时
             rewrite ^/(.*)/(.*)/(.*)  /$1/index.html last; # 匹配vue二级路由目录,如果不需要匹配三级目录这里可以加上last
             break;
        }
    }
    
    1. 贴上Vue路由相关的代码
    import Vue from 'vue'
    import Router from 'vue-router'
    
    Vue.use(Router)
    
    export const constantRoutes = [
      {
        path: '/login',
        component: () => import('@/views/login/index'),
        hidden: true
      },
    
      {
        path: '/404',
        component: () => import('@/views/404'),
        hidden: true
      },
    ]
    
    const createRouter = () => new Router({
      mode: 'history', // require service support
      base: process.env.BASE_URL,
      scrollBehavior: () => ({ y: 0 }),
      routes: constantRoutes
    })
    
    const router = createRouter()
    
    // Detail see: https://github.com/vuejs/vue-router/issues/1234#issuecomment-357941465
    export function resetRouter() {
      const newRouter = createRouter()
      router.matcher = newRouter.matcher // reset router
    }
    
    export default router
    
    1. 使用上面的方法,即可解决Vue与Nginx路由静态文件冲突的问题了。关于Nginx配置的问题,可以查看这里Nginx进阶

    相关文章

      网友评论

          本文标题:Vue与Nginx路由静态文件冲突的问题

          本文链接:https://www.haomeiwen.com/subject/lqesxktx.html