Vue项目上线后刷新报错404问题(apache,nginx,tomcat)

摘要:
LoadModulerewrite_modulelibexec/apache2/mod_Rewrite.so,删除前面的#5,找到AllowOverrideNone行,并将其更改为AllowOverrideAll以生成。htaccess文件有效。附加Nginx通用命令:Start/Nginx检查Nginx。conf配置文件/nginx-t重新启动/nginx-重新加载停止/nginx-sstop 3。Vue项目打包和发布tomcat错误:遇到问题:使用webpack打包Vue后,打包的文件将发布到tomcat。访问成功,但刷新后页面将报告404错误。我搜索了网站,发现问题是由HTML5History模式引起的。为什么?Vue已经给出了官方解释。你可以看到https://router.vuejs.org/zh-cn/essentials/history-mode.html然而,在阅读了问题之后,官方的解决方案并没有说明如何在tomcat下解决它。

一、 Vue项目打包发布apache报错:

route,配置一个覆盖所有的路由情况

1、需要修改router/index.js中new Router 配置,加一个base: '/htcm_front/', 它指定应用的基路径,该应用是服务于localhost/htcm_front路径下,所以必须加base配置,否则应用会展示404页面

2、需要修改config/index.js中build下的assetsPublicPath: '/htcm_front/',如果用相对路径,chunk文件会报错找不到。

3、将项目打包发布到apache的/var/www/html/下的htcm_front目录(htcm_front是打包生成的目录)

后端配置例子(apache配置文件):

4、修改httpd.conf文件,开启rewrite_module功能。

        LoadModule rewrite_module libexec/apache2/mod_rewrite.so,去掉前面的#

5、找到AllowOverride None的那行,把它改成AllowOverride All,来使.htaccess文件生效。

6、在你的项目目录下,也就是我的front目录添加一个.htaccess文件。

  Vim   .htaccess

 #.htaccess内容#

<IfModule mod_rewrite.c>
RewriteEngine On

   RewriteBase /

   RewriteRule ^index.html$ - [L]

   RewriteCond %{REQUEST_FILENAME} !-f

   RewriteCond %{REQUEST_FILENAME} !-d

   RewriteRule . /htcm_front/index.html [L]

   </IfModule>

   注:/htcm_front/ index.html是你打包目录的名字

   参考地址:https://segmentfault.com/a/1190000012548105

二、 Vue项目打包发布nginx报错:

(官方文档也有介绍)

https://blog.csdn.net/tomcat_2014/article/details/53129796

#HTML5 History模式:

VUE-router默认hash模式---使用URL的hash来模拟一个完整的URL,于是当URL改变时,页面不会重新加载。

如果不详很丑的hash,我们可以使用路由的history模式,这种模式充分利用history.pushState  API来完成URL跳转而无需重新加载页面。

Vue项目上线后刷新报错404问题(apache,nginx,tomcat)第1张

const route = new VueRouter({

       mode:‘history’,

routes: […]

}]

    当你使用history模式时,URL就像正常的url,列入http://test.com/user/id。也好看。

这种模式还需要后台支持,因为我们的因该是个单页客户端应用,如果后台没有正确配置,当用户浏览时就会返回404。

所以,你要在服务端增加一个覆盖所有情况的候选资源:如果URL匹配不到任何静态资源,则因该返回同一个index.html,这个页面就是你app依赖的页面。

后端配置例子,修改nginx配置文件:

Vue项目上线后刷新报错404问题(apache,nginx,tomcat)第2张

Vue项目上线后刷新报错404问题(apache,nginx,tomcat)第3张

这里配置location的时候要注意一下:

root写自己tomcat/webapps的路径

proxy_pass 写跳转后的地址,比如我这里是ip地址:端口号 ,注意后面不要加

这么写之后,就能实现vue的刷新功能了。

附Nginx常用命令:

启动

./nginx 

检查 nginx.conf配置文件

./nginx -t

重启

./nginx -s reload

停止

./nginx -s stop

三、Vue项目打包发布tomcat报错:

遇到的问题:

使用webpack打包vue后,将打包好的文件,发布到Tomcat上,访问成功,但是刷新后页面报404错。

在网上查找了一下,原来是HTML5 History 模式引发的问题,具体为什么,vue官方已经给出了解释,你可以看https://router.vuejs.org/zh-cn/essentials/history-mode.html

但是看完问题又来了,官方给出的解决方案中没有说tomcat下,怎么决解。

 解决方案:

根据官方给出的解决方案原理

你要在服务端增加一个覆盖所有情况的候选资源:如果 URL 匹配不到任何静态资源,则应该返回同一个 index.html 页面,这个页面就是你 app 依赖的页面。

所以在tomcat服务器下你可以这么做。在打包好的项目根目录下新建一个WEB-INF文件夹,在WEB-INF中写一个web.xml。

<?xml version="1.0"encoding="UTF-8"?>

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

  xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee

           http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"

  version="3.1"metadata-complete="true">

  <display-name>Router forTomcat</display-name>

  <error-page>

    <error-code>404</error-code>

    <location>/index.html</location>

  </error-page>

</web-app>

Vue项目上线后刷新报错404问题(apache,nginx,tomcat)第4张

Vue项目上线后刷新报错404问题(apache,nginx,tomcat)第5张

Vue项目上线后刷新报错404问题(apache,nginx,tomcat)第6张

这样的目的就是一旦出现404就返回到 index.html 页面。

最后还需要配置一下你的route,配置一个覆盖所有的路由情况,然后在给出一个 404 页面。

const router = new VueRouter({

 mode: 'history',

 routes: [

  {

    path: '*',

    component: (resolve) => require(['./views/error404.vue'], resolve)

  }

 ]

})

以上所述是小编给大家介绍的Vue项目webpack打包部署到apache,nginx,tomcat刷新报404错误问题的解决方案,希望能帮助到您。

免责声明:文章转载自《Vue项目上线后刷新报错404问题(apache,nginx,tomcat)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Centos7 安装与破解 Confluence 6.7.1Chart控件,鼠标选择区域,可以局部放大缩小下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Lanproxy 遍历目录漏洞 CVE-2021-3019 附批量POC

一、概述 Lanproxy内网穿透工具,支持tcp流量转发,可支持任何tcp上层协议(访问内网网站、本地支付接口调试、ssh访问、远程桌面等等)今天给大家带来的是 Lanproxy 遍历漏洞 (CVE-2021-3019)通过../绕过读取任意文件。 该漏洞允许读取/../conf/config.properties来获取到内部网连接的账户密码。 二、漏洞...

Apache下通过shell脚本提交网站404死链

网站运营人员对于死链这个概念一定不陌生,网站的一些数据删除或页面改版等都容易制造死链,影响用户体验不说,过多的死链还会影响到网站的整体权重或排名。 百度站长平台提供的死链提交工具,可将网站存在的死链(协议死链、404页面)进行提交,可快速删除死链,帮助网站SEO优化。在提交死链的文件中逐个手动填写死链的话太麻烦,工作中我们提倡复杂自动化,所以本文我们一起...

Sqlmap注入技巧收集整理

TIP1 当我们注射的时候,判断注入 http://site/script?id=10http://site/script?id=11-1 # 相当于 id=10http://site/script?id=(select 10) # 相当于 id=10 http://site/script?id=10 and 1=1 #失败 通过判断可发现and和or被过...

优秀开源项目的svn地址

很多优秀的开源项目已经提供SVN源码签出了,无论是解疑还是学习,都是一大幸福之事啊! Apache的SVN库,强烈推荐! http://svn.apache.org/repos/asf/  里面不但有Struts的源码,还有著名的Apache jakarta project 相当好的Web UI框架Tiles 现在很流行的项目管理工具Maven Ant、C...

Linux(ubuntu)安装MediaWiki

本篇文档所述步骤,作者完全验证过。一切OK。 作者:http://gaoxingf.blog.51cto.com/612518/188132,Younger Liu 本作品采用知识共享署名-非商业性使用-相同方式共享 3.0 未本地化版本许可协议进行许可。 1. 编译安装libxml2 #wget ftp://xmlsoft.org/libxml2/lib...

Vue2 使用Typescript 使用vue-property-decorator的简单介绍

参考:https://github.com/kaorun343/vue-property-decorator 怎么使vue支持ts写法呢,我们需要用到vue-property-decorator,这个组件完全依赖于vue-class-component. 首先安装:  npm i -D vue-property-decorator 我们来看下页面上代码展示...