美文网首页
Nginx解决VUE的history模式下刷新404报错

Nginx解决VUE的history模式下刷新404报错

作者: linjiajiam | 来源:发表于2018-05-21 16:44 被阅读0次

    众所周知,vue的路由模式如果使用history,刷新会报404错误。官方给出了几种解决方式如下:


    image.png

    但是其实这官方的demo是有一些需要注意的地方的,网上很多其他人的解决方式都是有坑。
    1、之所以写这篇教程,是我们的项目使用到了history模式,报404后。由于我们的项目是放到了Tomcat中,所以选择了网上最简单的一种解决方式,直接在Tomcat中的web.xml中加入以下内容解决:

    <error-page>    
        <error-code>404</error-code>    
        <location>/</location>    
    </error-page> 
    
    image.png

    这个方式有一个弊端,虽然可以解决404的显示问题,但是这个404会被浏览器捕获到,这就造成一个坑,如果你的WEB项目是在微信中打开的,微信捕获到404后,就会重定向到公益页面,就造成了刷新,直接跳到了公益页面。所以后来我们用了nginx解决。

    2、使用nginx,刷新404,在nginx捕获,返回到 index.html 页面,这个页面就是你 app 依赖的页面。
    这里必须注意,nginx的配置与前端代码中静态资源打包方式有关联。这里先解释一下我的项目路径等等。
    2.1、项目打包后目录:wap


    image.png

    2.2、部署目录:/root/server/vue


    image.png

    2.3、assetsPublicPath打包方式为绝对路径


    image.png

    3、具体Nginx配置
    我们的项目URL是:http://fat2.test.cn/wap
    在/etc/nginx/conf.d目录下,新建一个fat2.test.cn.conf的配置文件,内容如下:

    
    server {
        listen       80;         #监听的端口
        server_name  fat2.test.cn;    #监听的URL
    
        location / {
          root /root/server/vue/wap/;             #项目路径
          index /index.html;                        
          try_files $uri $uri/ /index.html;        #匹配不到任何静态资源,跳到同一个index.html
        }
        
        #error_page  404              /404.html;
    
        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }
    
    }
    

    如果出现以下错误,那么肯定是nginx配置与代码静态资源打包方式不匹配


    image.png

    相关文章

      网友评论

          本文标题:Nginx解决VUE的history模式下刷新404报错

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