当前位置 主页 > 服务器问题 > nginx问题汇总 >

    在nginx上部署vue项目(history模式)的方法

    栏目:nginx问题汇总 时间:2018-12-10 17:00

    vue-router 默认是hash模式,使用url的hash来模拟一个完整的url,当url改变的时候,页面不会重新加载。这篇文章主要介绍了在nginx上部署vue项目(history模式),需要的朋友可以参考下

    vue-router 默认是hash模式,使用url的hash来模拟一个完整的url,当url改变的时候,页面不会重新加载。但是如果我们不想hash这种以#号结尾的路径时候的话,我们可以使用路由的history的模式。比如如下网址:

    使用hash模式的话,那么访问变成 http://localhost:8080/bank/page/count/#/ 这样的访问,如果路由使用 history的话,那么访问的路径变成 如下:

    http://localhost:8080/bank/page/count 这样的了;

    在路由的配置就是如下:我们还是以 vue-cli项目为例:

    在src/router/index.js 代码如下:

    import Vue from 'vue';import Router from 'vue-router';// import HelloWorld from '@/views/HelloWorld';

    Vue.use(Router);

    const router = new Router({ mode: 'history', // 访问路径不带井号 需要使用 history模式 base: '/bank/page', // 基础路径 routes: [  {   path: '/count',   name: 'count',   component: resolve => require(['@/views/count'], resolve) // 使用懒加载  } ]});

    不过history的这种模式需要后台配置支持。比如:

    当我们进行项目的主页的时候,一切正常,可以访问,但是当我们刷新页面或者直接访问路径的时候就会返回404,那是因为在history模式下,只是动态的通过js操作window.history来改变浏览器地址栏里的路径,并没有发起http请求,但是当我直接在浏览器里输入这个地址的时候,就一定要对服务器发起http请求,但是这个目标在服务器上又不存在,所以会返回404,怎么解决呢?我们现在可以把所有请求都转发到 http://localhost:8080/bank/page/index.html上就可以了。

    一: apache服务器上的配置如下:

    1. 如果我们现在是使用apache做web服务器的话,我们需要开启 .htaccess支持即可:

    在文件里加上如下,就一切正常了

    <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.html$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /bank/page/index.html [L]</IfModule>

    上面的apache的作用是:把所有服务器上不存在的请求全部转发到 index.html上去,这样就可以直接通过各种url来访问了。

    注意:

    1. RewriteRule . /bank/page/index.html [L] 这段代码;前面需要加 /bank/page/这样的,因为我在路由配置base里面

    加了 /bank/page/ 这个路径,否则匹配不到了。

    2. vue-cli 项目中需要修改 config/index.js 中的build下的 assetsPublicPath: '/bank/page/', 如果使用相对路径,

    chunk文件会报错找不到。

    3. 在apache的 www/bank/page 目录下新建 .htaccess文件,需要修改RewriteRule 为/bank/page/index.html, 否则刷新页面服务端会直接报404错误。

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

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

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

    二:nginx服务器上的配置如下:

    vue-cli 执行打包命令: