vue2打包带路径的项目,刷新404问题解决

问题描述

        Vue 2 项目打包时设置了 publicPath: '/web/',并通过 Nginx 配置访问 http://ip/web 时可以正常加载首页,但刷新页面时出现 404 错误

原nginx的配置 

location /web {
    alias /www/dist; # 静态文件地址
    try_files $uri $uri/ /index.html;
    index index.html index.htm;
}

vue的vue.config.js

module.exports = {
// 例如 https://www.xxx.com。如果应用被部署在一个子路径上,你就需要用这个选项指定这个子路径。例如,如果你的应用被部署在 https://www.xxx.com/web,则设置 /web/。
  publicPath: '/web/',
  #省略
}

问题原因

  • 当访问 http://ip/web 时,Nginx 会正确返回 /www/dist/index.html

  • 但当刷新页面或直接访问子路由(如 http://ip/web/about)时,Nginx 会尝试查找 /www/dist/about 文件,但该文件不存在,因此返回 404 错误。

解决方法

需要在 try_files 中正确处理子路径 /web,将所有请求重定向到 /web/index.html

将 try_files 的路径改为 /web/index.html,确保所有请求都返回 index.html,由 Vue 路由处理。 

 nginx配置

location /web {
    alias /www/dist; # 静态文件地址
    try_files $uri $uri/ /web/index.html; # 处理子路径
    index index.html index.htm;
}

配置说明

  1. alias /www/dist;

    • 将 /web 路径映射到 /www/dist 目录。

  2. try_files $uri $uri/ /web/index.html;

    • $uri:尝试匹配请求的文件。

    • $uri/:尝试匹配请求的目录。

    • /web/index.html:如果以上都找不到,则返回 /web/index.html,由 Vue 路由处理。

  3. index index.html index.htm;

    • 默认加载 index.html 或 index.htm

验证步骤

  1. 修改 Nginx 配置文件后,重新加载 Nginx:

    sudo nginx -s reload
  2. 访问 http://ip/web,确保首页可以正常加载。

  3. 刷新页面或直接访问子路由(如 http://ip/web/about),确保不再出现 404 错误。


注意事项

  1. alias 和 root 的区别

    • alias 会完全替换 location 的路径。

    • root 会将 location 的路径附加到指定的目录后。

    • 例如:

      location /web {
          alias /www/dist; # /web -> /www/dist
      }

      等同于:

      location /web {
          root /www; # /web -> /www/web
      }

  2. publicPath 配置

    • 确保 Vue 项目的 publicPath 配置为 /web/,与 Nginx 的 location /web 一致。


总结

  • 修改 Nginx 配置,将 try_files 的路径改为 /web/index.html

  • 确保 Vue 项目的 publicPath 配置为 /web/

  • 重新加载 Nginx 并验证页面刷新是否正常。

### 如何运行已打包Vue 项目 为了运行一个已经打包好的 Vue 项目,通常需要遵循一系列特定的操作流程。当构建完成之后,生成的文件会被放置在一个指定目录下,通常是 `dist` 文件夹内[^2]。 #### 准备工作环境 确保本地环境中安装了 Node.js 和 npm 或 yarn,因为这些工具对于启动服务器以及管理依赖项至关重要。如果使用的是Node作为Web服务端来加载Vue应用,则还需要配置好相应的API接口以便处理来自前端页面的各种请求[^3]。 #### 启动静态资源服务器 由于 Vue 应用本质上是一个单页应用程序(SPA),因此可以直接通过任何支持静态文件托管的服务来进行部署和访问。可以利用简单的HTTP服务器模块如 http-server 来快速搭建测试环境: ```bash npx http-server dist/ ``` 这条命令会在当前路径下的 `dist/` 目录中寻找并提供静态资源给浏览器访问。默认情况下会监听8080端口,可以通过参数 `-p` 自定义其他可用端口号。 #### 使用 Webpack Dev Server 进行开发调试 虽然上述方法适用于生产环境下直接发布HTML/CSS/JS等静态资产,但在开发阶段更推荐采用Webpack内置的DevServer功能。这允许热重载(Hot Module Replacement)特性使得修改后的组件能够即时反映到界面上而无需刷新整个页面: ```javascript // vue.config.js 配置示例 module.exports = { devServer: { open: true, port: 9000, hot: true } }; ``` 然后执行如下npm脚本来开启带有自动编译监控能力的发展模式: ```bash npm run serve ``` 这样就可以在本地网络地址上预览正在开发中的Vue项目实例了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值