在nginx上部署vue项⽬(history模式);
vue-router 默认是hash模式,使⽤url的hash来模拟⼀个完整的url,当url改变的时候,页⾯不会重新加载。但是如果我们不想hash这种以#号结尾的路径时候的话,我们可以使⽤路由的history的模式。⽐如如下⽹址:
使⽤hash模式的话,那么访问变成 localhost:8080/bank/page/count/#/ 这样的访问,如果路由使⽤ history的话,那么访问的路径变成如下:
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,怎么解决呢?我们现在可以把所有请求都转发到 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. 修改f⽂件,开启rewrite_module功能。
5. LoadModule rewrite_module libexec/apache2/mod_rewrite.so,去掉前⾯的#
6. 然后到AllowOverride None的那⾏,把它改成AllowOverride All,来使.htaccess⽂件⽣效。
⼆:nginx服务器上的配置如下:
vue-cli 执⾏打包命令:
npm run build
如上进⾏打包,⽣成dist⽂件夹,把该⽂件夹下的⽂件直接复制到nginx服务器⽬录下,就可打开项⽬,但是只有⾸页可以看到的,刷新⼀下页⾯也是404了,原因和上⾯⼀样,因此需要在nginx服务器
配置对所有的路径或者⽂件夹进⾏跳转,重定向到⾸页 index.html即可:这样就能到路由了。
nginx服务器配置如下:
1. ⾸先登录服务器。
2. 进⼊⽬录 /etc/usr/local/nginx/conf/下;
执⾏命令:
2-1 cd /etc/ 回车
2-2 cd /usr/ 回车
2-3 cd loacl/ 回车
2-4 cd nginx 回车
2-5 cd conf 回车
2-6 vi f 进⼊ nginx⽂件内新建⼀个项⽬的相关配置如下:
nginx和apache区别⽐如我们现在的域名地址这样访问的:aa.xx/bank/page/count , 需要如下配置:
server {
listen 443; # 监听本机所有ip上的 443 端⼝
listen 80; # 监听本机所有ip上的 80 端⼝
server_name aa.xx; # 域名地址
access_log /data/www/logs/nginx/aa/access.log main; # 新建⽇志⽂件
include f;
/* 下⾯是多个location ⽤于配置路由地址 */
location / {
proxy_pass aa/;
include f;
}
location /bank/page/ {
try_files $uri $uri/ /bank;
},
/* aa.xx/bank2/page/count 有多个不同的地址就加⼀个如下这个配置 */
location /bank2/page/ {
try_files $uri $uri/ /bank2;
}
error_page 500 502 503 504 /502.html;
location = /50x.html {
root html;
}
}
try_files 指令:
语法:try_files file ... uri 或 try_files file ... = code
默认值:⽆
作⽤域:server location
其作⽤是按顺序检查⽂件是否存在,返回第⼀个到的⽂件或⽂件夹(结尾加斜线表⽰为⽂件夹),如果所有的⽂件或⽂件夹都不到,会进⾏⼀个内部重定向到最后⼀个参数。
需要注意的是,只有最后⼀个参数可以引起⼀个内部重定向,之前的参数只设置内部URI的指向。最后⼀个参数是回退URI且必须存在,否则会出现内部500错误。命名的location也可以使⽤在最后⼀个参数中。与rewrite指令不同,如果回退URI不是命名的location那么
args不会⾃动保留,如果你想保留args,则必须明确声明。
location指令
语法:location [=|~|~*|^~|@] /uri/ { … }
默认值:⽆
作⽤域:server
location指令是⽤来为匹配的URI进⾏配置,URI即语法中的"/uri/",可以是字符串或正则表达式。但如果要使⽤正则表达式,则必须指定前缀。 [@] 即是命名location,⼀般只⽤于内部重定向请求。
3. 设置成功后需要重启:nginx重启命令;在 /etc/usr/local/nginx/conf/ ⽬录下, cd ../ 然后进⼊sbin⽬录下 cd sbin 接着运⾏命令 ./nginx -s reload 重启后即可⽣效。
4. 在/data/www/logs/nginx/aa/⽬录下新建 access.log ⽂件。
然后nginx保存和退出命令 :wq
直接退出的命令是 :q
5. mac系统下⾃带 apache2服务器,需要对apache2作反向代理;配置如下:
进⼊本地mac apache2配置;
命令:cd /etc/apache2
命令:sudo f
<VirtualHost *:80>
ProxyRequests off
Header set Access-Control-Allow-Origin *
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
<Location /aa>
ProxyPass localhost:8896/
ProxyPassReverse localhost:8896/
</Location>
// .... 更多配置省略
</VirtualHost>
然后进⼊ sbin⽬录下启动服务 sudo apachectl start
重启命令如下 sudo apachectl restart
6. java服务端的配置如下(如果是vm放到开发那边的话,开发那边需要如下处理下,如果页⾯vm不放在开发那边的话,下⾯的配置可以忽略)
在项⽬⽬录下 webapp/web-inf/view/ 新建⽂件夹 aa 和 include⽂件
aa⽂件下新建index.vm
如下代码:
#parse("include/common.vm")
#@frame("xx管理",true)
#css(["${version}/business/aa/aa.css"]) // 打包后的css路径,具体看⾃⼰的路径
<div id="app"></div>
#js(["${version}/business/aa/aa.js"]) // 打包后的js路径,具体看⾃⼰的路径
#end
6-2 java开发需要配置⼀下:
1 设置路由: /aa 设置路由到 /aa/index.vm
2 这个include/common.vm有⼀个地址配置,是在disconf上配置的,你加⼀个
地址配置到 //aa.xx/aa/dist 上即可
Processing math: 100%
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论