42. nginx 匹配的 try_file 与前端路由 404 以及路由优先级问题

本文探讨了在访问网站并点击登出后,前端路由将用户重定向至登录页面,但在刷新页面时出现nginx 404错误的现象。通过分析前端路由配置与nginx服务器配置,揭示了解决该问题的方法,即在nginx配置中添加try_file指令,确保在找不到指定路径时返回index.html。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首发于我的github博客, 欢迎关注

  1. 场景描述:

    1. 访问www.abc.com, 之后点击界面里面的logout,前端路由处理,跳转到www.abc.com/login

    2. 但是登录页面刷新之后,就显示nginx 404了

    3. 奇怪的地方就在于,为何退出的时候,重定向到/login的时候,没有报404?

    4. 前端路由重定向到/login逻辑:this.$router.push({name: 'login'});

    5. 贴下前端路由配置

      routes: [
        {
             name: 'home',
             path: '/',
             component: Home,
             meta: { requiresAuth: true },
         },
         {
             path: '/login',
             name: 'login',
             component: Login,
         },
         {
             path: '*',
             component: NotFound,
         }
      ]
      
    6. 现有nginx配置

      location / {
          root: /var/data/static;
      }
      
  2. 解决:

    1. 为何点击退出可以正常显示登录页面?

    因为点击退出,使用的redirect是前端路由this.$router.push({name: 'login'});来实现的,这时候已经有index.html 和相关的js了,可以直接使用前端路由跳转到/login路由对应的组件

    1. 为何刷新的时候显示: nginx/404?
    1. 因为刷新的时候,会先向服务器请求xxxx.com/login,
    2. 这时候服务器的nginx配置中没有关于/login路径的配置,直接报nginx/404的错误
    1. 如何解决?

    在nginx的location /{root xxxpath}中添加try_file: /index.html的配置

    1. 解释:
    1. nginx进行匹配路径的时候,发现没有/login的路径,便会转到/路径处理。
    2. 发现root路径下(是静态文件的root目录,不是linux的root目录)没有login文件,就会try_file规则,返回index.html,
    3. 这样浏览器拿到index.html 之后,开始加载其中的前端路由部分
    4. 这时候/login就会在前端路由中找到匹配规则。
    1. 同理/404也可以写在前端路由中了
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值