vue中history路由模式下打包后 二级 多级路由无法访问 刷新空白404的问题

本文深入探讨了在Vue.js项目中从哈希路由切换到History模式时遇到的多级路由访问问题。详细解释了问题根源在于资源文件路径的变化,并提供了解决方案:通过配置vue.config.js中的publicPath选项来确保资源文件正确加载,从而避免页面空白的情况。

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

        最近写了几个后台,都是用的哈希路由. 前几天写了一个移动端的任务中心. 领导要求需要用history模式的路由.于是踩了一些坑儿. 特地分享给大家.

 

        改为history后遇到了多级路由无法访问的问题, 原因:

        我们以前使用哈希路由时, 打包后, 然后访问网址network面板的js文件请求是这样的:

         http://ap.taoyuewenhua.com/js/chunk-7b65b1f8.1f169e27.js

        而且当我们切换路由以及切换到二级路由时  js及css文件访问的路径是不变的  依然是:

        http://ap.taoyuewenhua.com/js/chunk-7b65b1f8.1f169e27.js

        我们都知道打包后的文件路径是这样的:

         dist

                css

                         a.css

                js

                         b.js

                index.html

           所以这个时候访问是没有问题的

          

             但一旦更改到history模式后, 一级路由也是没有问题的, 同上;    但是多级路由就有有问题 , 多级路由时, 请求的地址如下:

            假设你的多级路由是path:     'order/list';     请求地址就会变为:

            http://ap.taoyuewenhua.com/order/list/js/chunk-7b65b1f8.1f169e27.js

            css文件也是这样的, 请求时的路径变成了这样, 所以就请求不到了. 页面显示空白;  也就是说, 我们只要让这个地址变成

           http://ap.taoyuewenhua.com/js/chunk-7b65b1f8.1f169e27.js

           就可以请求到了, 把order/list去掉就行.  怎么做呢?  其实很简单:

           在你项目的vue.config.js里 加上这个:    publicPath: '/'     

            就可以了

           注意: vue.config.js是vue-cli3.0及以上的文件   如果你的项目是vue-cli2.X    则需要去config  >  index.js 里去修改;  而且路径不叫publicPath    叫assetsPublicPath

 

    ok   今天到此   

           

            

### Nginx 配置 Vue 3.0 项目二级路由的方法 为了使 Nginx 正确处理 Vue 3.0 的二级路由,需要确保 Nginx 将所有未匹配的 URL 请求重定向回 `index.html` 文件。这是因为 Vue 使用的是前端路由机制,而默认情况下 Nginx 并不知道如何解析这些动态路径。 以下是具体的配置方法: #### 1. 确保 Nginx 已正确设置站点入口 在配置之前,需确认项目的静态资源已被部署至服务器上的某个目录,并且该目录已通过软链等方式被正确映射到 `/etc/nginx/sites-enabled/` 下的相关配置文件中[^1]。 假设你的 Vue 项目构建后的静态文件位于 `/var/www/vue-app/dist` 中,则可以在对应的 Nginx 配置文件中定义如下内容: ```nginx server { listen 80; server_name your-domain.com; root /var/www/vue-app/dist; # 设置静态资源根目录 index index.html; location / { try_files $uri /index.html; # 如果找不到对应文件则返回 index.html 处理路由 } } ``` 上述配置中的关键部分在于 `try_files $uri /index.html` 行。这行指令告诉 Nginx 当访问不存在的实际文件或目录时,应将请求转发给 `index.html`,从而让 Vue Router 来接管并渲染正确的视图[^3]。 #### 2. 支持 History 模式的路由 如果 Vue 应用采用了 HTML5 History 模式而非 Hash 模式作为其路由策略,则还需要进一步调整以防止刷新页面时报错 404。此时同样依赖于上面提到的 `try_files` 指令来捕获所有可能的子路径请求并将它们交还给单页应用 (SPA) 自身去管理。 另外需要注意的一点是,在开发阶段可以通过修改 `vue.config.js` 文件内的 `publicPath` 参数来自定义不同环境下的公共资源前缀路径[^2]。例如: ```javascript module.exports = { publicPath: process.env.NODE_ENV === 'production' ? '/your-sub-path/' : '/' }; ``` 这里设置了生产环境下会附加特定子路径的情况,因此实际部署过程中也需要同步更新 Nginx 的 `root` 或者其他关联字段指向新的位置。 最后提醒一点,完成以上更改之后记得重启 Nginx 才能使新设定生效: ```bash sudo systemctl restart nginx ``` --- ### 总结 综上所述,要成功配置 Nginx 对 Vue 3.0 项目的支持尤其是涉及多级嵌套形式的路由结构时,核心要点就在于合理运用 `try_files` 和明确指定好各个层次间的相对关系以及最终落地的具体物理存储地址之间的转换逻辑。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值