最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • Vue路由history模式部署到域名二级目录刷新404

    正文概述 掘金(海豚站长)   2021-03-01   1476

    问题描述

    • 去除路由中难看的 /#/
    • 路由带#号,微信公众号微信支付微信分享和自动登录,处理起来比较坑
    • 需要部署在域名二级目录中

    解决问题

    vue路由中去除#

    路由history模式官方文档

    vue router js

    import Vue from 'vue';
    import VueRouter from 'vue-router';
    
    Vue.use(VueRouter);
    const routes = [
      {
        path: '',
        component: require('../components/HelloWorld.vue').default
      },
      {
        path: '/home',
        component: require('../components/Home.vue').default
      }
    ]
    
    const router = new VueRouter({
      mode: 'history',
      routes
    });
    
    export default router;
    

    项目中使用相对路径

    这是开发常识
    vue.config.js

    module.exports = {
      publicPath: './'
    } 
    

    部署到二级目录下的配置

    vue router js

    import Vue from 'vue';
    import VueRouter from 'vue-router';
    
    Vue.use(VueRouter);
    const routes = [
      {
        path: '',
        component: require('../components/HelloWorld.vue').default
      },
      {
        path: '/home',
        component: require('../components/Home.vue').default
      }
    ]
    
    /**
    base 基础路径解释:
    假如我的打开地址是:xxxxxx.com/m/,配置了模块,或者放置在了子文件夹下面,那么就会出问题。其实,这是因为router无法找到路径中的组件,所以也就无法渲染了。只需要修改router中的index.js,加一个基础路径就可以了。
    */
    
    const router = new VueRouter({
      mode: 'history',
      base: '/m/',
      routes
    });
    
    export default router;
    

    nginx配置

    server {
      listen       8074;
      server_name  localhost;
    
      #charset koi8-r;
      #access_log  /var/log/nginx/host.access.log  main;
    
      location /m/{
        alias /data/;
        add_header Access-Control-Allow-Origin *;
        add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
        add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';
        index  index.html index.htm;
        try_files $uri $uri/ /m/index.html;
      }
    }
    

    刷新404问题

    原因: 那是因为在history模式下,只是动态的通过js操作window.history来改变浏览器地址栏里的路径,并没有发起http请求,但是当我直接在浏览器里输入这个地址的时候,就一定要对服务器发起http请求,但是这个目标在服务器上又不存在,所以会返回404

    解决方案:后端nginx配置 方案一:官方推荐

    default.conf

    server {
      listen       8074;
      server_name  localhost;
    
      #charset koi8-r;
      #access_log  /var/log/nginx/host.access.log  main;
    
      location /m/{
        alias /data/;
        add_header Access-Control-Allow-Origin *;
        add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
        add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';
        index  index.html index.htm;
        try_files $uri $uri/ /m/index.html;
      }
    }
    

    方案二:匹配errpr_page

    location /{
      root   /data/nginx/html;
      index  index.html index.htm;
      error_page 404 /index.html;
    }
    

    成功解决

    刷新home页面,正常访问资源 Vue路由history模式部署到域名二级目录刷新404


    起源地下载网 » Vue路由history模式部署到域名二级目录刷新404

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元