关于nginx+vue,同域名访问多个不同项目,刷新404问题的解决方法

这个问题困扰了我两天,按照网络上各种方法,试了又试,都不适合我的这种情况。在不懈的努力下,终于找到了解决方法,下面就给大家说说。

首先先介绍下我的项目情况:

同一个域名,通过不同路径  www.xxxx.com,www.xxxx.com/project2,www.xxxx.com/project3的方式来访问到不同项目,也就是我一共是3个项目共用一个域名,其中一个项目是域名直接指向的,不带有其他路径,也就是www.xxxx.com可以直接访问一个项目

现在就来说一下实现方法:

nginx.conf

       location / {
            set $flag 0;
            #获取url完整请求
			set $URL  $host$request_uri;
			if ($URL ~ "/project2/"){
			    set $flag 1;
				root /data/swh/www/project2;
			}
			if ($URL ~ "/project3/"){
			    set $flag 2;
				root /data/swh/www/project3;
			}
			if ($flag = 0){
			    root /data/swh/www/swh_main/;#这里是project1
			}
			index index.html index.htm;
            autoindex on;
        }
        
        location /project2 {
            alias /data/swh/www/project2;
	        index  index.html index.htm;
	        try_files $uri $uri/ /index.html;
	        autoindex on;
        }
        
        location /project3 {
            alias /data/swh/www/project3;
	        index  index.html index.htm;
	        try_files $uri $uri/ /index.html;
	        autoindex on;
        }

下面来说明一下:

首先访问www.xxxx.com/project2,登录成功到首页,一切正常,但发现此时的URL已经变成www.xxxx.com/project2/index,此时点击刷新,就会404,但是按照上图配置就不会再报404了。

因为刷新时 location /project2  这个配置项找不到文件或文件夹,try_files就会发挥作用,$uri就是$root/project2/index,我的项目根目录也就是$root是/data/swh/www,目录中没有这个文件,然后就是$uri/,多了一个 / ,就是找文件夹,$root/project2/index/,显然也没有,最终就会访问try_files的最后一个选项,也就是请求www.xxxx.com/index.html,这是就会触发 location / {} 这个配置项,里面的 if 判断相信大家都能看懂。由于nginx里面不能进行复杂的判断,所以用flag来标记。
 

访问www.xxxx.com/project3,就同理啦!

访问www.xxxx.com,是直接触发location / {} 这个配置项,flag=0,直接访问到项目即可。

好啦,现在就可以快快乐乐的去刷新啦~

哦,对了,补充下vue的配置,用 project2 举例:

vue.config.js 里面的 publicPath

module.exports = {
  publicPath: process.env.NODE_ENV === "production" ? "/project2/" : "/project2/"
}

router/index.js 里面的 base

export default new Router({
  mode: 'history', // 去掉url中的#
  scrollBehavior: () => ({ y: 0 }),
  base: "/project2/",
  routes: constantRoutes
})

就到这里啦,拜拜~

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
nginx中部署多个vue前端项目时,如果出现二级目录不能访问访问空白的问题,可能是配置文件有误或者项目部署路径有误。 首先,确保nginx的配置文件中的location部分正确配置了前端项目的二级目录路径。 例如,有两个前端项目分别为project1和project2,部署路径为/var/www/html/project1和/var/www/html/project2。那么,在nginx的配置文件中,可以这样配置: ``` server { listen 80; server_name localhost; location /project1 { alias /var/www/html/project1/dist; try_files $uri $uri/ /project1/index.html; } location /project2 { alias /var/www/html/project2/dist; try_files $uri $uri/ /project2/index.html; } } ``` 通过配置location /project1和location /project2,将对应的项目访问路径与实际的部署路径关联起来。 另外,注意在配置location时,要正确指定项目的dist文件夹路径,并设置try_files指令来处理路由页面的访问。 配置完成后,重新加载nginx配置文件,即可访问到对应的二级目录下的前端项目了。 如果还是无法访问或出现空白页面,可以检查项目是否正确部署到了/var/www/html目录下,并确认项目的打包是否成功。 总结起来,对于nginx部署多个vue前端项目问题,主要是要确保配置文件中的location部分正确指定了项目的二级目录路径,并检查项目的部署路径和打包是否正确,以及nginx配置的重新加载。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值