vue部署后静态文件加载404的解决

针对“vue部署后静态文件加载404的解决”,我给出了以下完整攻略:

问题描述

在vue应用部署到服务器后,访问页面时静态资源文件(如js、css、img等)出现404错误,该如何解决?

解决步骤

步骤一:修改配置文件

  1. 首先在vue.config.js文件中增加如下代码:

javascript
module.exports = {
publicPath: './'
}

或者修改package.json 文件中的homepage字段如下:

javascript
"homepage": "./"

  1. 如果你使用了vue-cli3来创建Vue项目,那么你需要在打包前加上--mode production参数,即npm run build -- --mode production, 否则publicPath的值会默认为 /, 这样即使正确配置 Apache 或 nginx 反向代理,也会出现404 问题。

  2. 如果publicPath设置为"./" 需要记得在部署后的HTML文件中引入对应的静态资源文件时路径和文件位置应该是相对路径和文件夹。否则部署后会发现资源文件没有找到。

步骤二:配置服务器

以 Nginx 为例,配置 Nginx 静态资源访问:

  1. 使用root指令配置静态文件路径:

```
server {
listen 8080;
server_name localhost;
root /usr/share/nginx/html;

   # serve static files
   location / {
     try_files $uri $uri/ @router;
     index index.html;
   }

   location /static/ {
     alias /usr/share/nginx/html/static/;
   }

   location @router {
     rewrite ^.*$ /index.html last;
   }

}
```

这里的root字段根据Nginx实际目录填写,该目录即为Vue编译后的dist文件夹。

  1. 在Nginx 中,访问静态文件,需要 rewrite URL 到 index.html。因此,还需在 Nginx 配置文件中加入以下内容:

location / {
try_files $uri $uri/ /index.html;
}

这样我们就完成了对静态文件的访问重定向配置。

步骤三:重启服务器

最后的一步是重启 Nginx。在 Ubuntu 系统中,可以使用以下命令重启:

sudo service nginx restart

至此,vue部署后静态文件加载404的问题就完美解决了。

示例说明

示例一:使用GitHub pages进行部署

假设我们已经将Vue项目打包好并上传到GitHub上的仓库demos中。在本地调试的时候可以直接打开dist文件夹中的index.html文件。但是,在github pages上打开网页却发现所有的静态资源都是404,代码如下:

//在 vue.config.js 中进行publicPath设置
module.exports = {
    publicPath: process.env.NODE_ENV === 'production' ? '/demos/' : '/'
}

在以上代码中,我们给publicPath设置了相对路径'/demos/',表示所有的静态资源都放在根目录的demos文件夹中,这样就可以加载到静态资源了。

示例二:使用微服务网关部署

假设我们使用微服务网关来进行部署,为了正常加载静态资源文件,需要对Nginx的配置文件进行修改。假设我们的网站前缀为prefix/path,则需要在Nginx的配置文件中加入以下内容:

server {
    listen       80;
    server_name  localhost;

    location /prefix/path/ {
        proxy_pass http://web-site-name;
        proxy_redirect http:// $scheme://;

        proxy_set_header Host              $host;
        proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;
        proxy_set_header X-Real-IP         $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

    location /prefix/path/static/ {
        alias /opt/web-static/;
    }

    location /prefix/path/favicon.ico {
        alias /opt/web-static/favicon.ico;
    }

}

解析

  1. 定义了 http://web-site-name 实际的上游服务器。
  2. 对 resource 的访问路径前缀为 /prefix/path/static/ 时,修改了实际的静态文件的读取路径。
  3. 对于特定静态文件 favicon.ico,对访问路径做了相应修改。
  4. 针对所有以 /prefix/path/ 开始的 URL,转换为 http://web-site-name 上游服务器的相应路径(去掉了 /prefix/path/)。
  5. 修改了 proxy_redirect 以适应上游服务器响应的 301/302 状态代码的 Location 值。

补充

在前缀为prefix/path的情况下,需要将静态资源文件放到网站的根目录的static文件夹中。同时,要注意Vue打包时部署publicPath一定要一致。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue部署后静态文件加载404的解决 - Python技术站

(0)
上一篇 2023年6月25日
下一篇 2023年6月25日

相关文章

  • oracle创建数据表以及对数据表、字段、主外键、约束的操作

    Oracle创建数据表以及对数据表、字段、主外键、约束的操作 在关系型数据库中,数据表是存储数据的基本组成部分。在Oracle中,我们可以通过SQL语句来创建数据表,并对数据表的字段、主外键、约束等进行操作。本文将详述如何在Oracle中创建数据表以及对数据表进行相关操作。 创建数据表 在Oracle中,使用CREATE TABLE语句来创建数据表。该命令需…

    其他 2023年3月29日
    00
  • gradle使用maven仓库的方法

    以下是关于“Gradle使用Maven仓库的方法”的完整攻略,包括Gradle使用Maven仓库的定义、Gradle使用Maven仓库的方法、示例说明和注意事项。 Gradle使用Maven仓库的定义 Gradle是一种基于Apache Maven和Apache Ant的构建工具,可以使用Maven仓库来管理依赖项。Maven仓库是一个存储Java库和元数据…

    other 2023年5月8日
    00
  • Go 1.18新特性之泛型的全面讲解

    Go 1.18新特性之泛型的全面讲解 背景介绍 在软件开发过程中,我们经常需要使用数据结构(如列表、树、哈希表等)和算法(如排序、查找、遍历等)。在现有的编程语言中,使用这些数据结构和算法都需要我们重复编写许多相似的代码,这不仅浪费时间,也容易引入bug。因此,一种可以重复使用的通用代码块,也就是“泛型”,成为了程序员们迫切需要的功能之一。 在Go语言的早期…

    other 2023年6月27日
    00
  • 将字节数组转换为字符串

    在编程中,有时需要将字节数组转换为字符串。在Python中,可以使用decode()函数将字节数组转换为字符串。以下是将字节数组转换为字符串的完整攻略,包括常见问题和两示例说明。 常见问题 1. 什么是字节数组? 字节数组是一组字节的序列。在Python中,节数组可以使用bytes类型表示。 2. 什么是字符串? 字符串是一组字符的序列。在Python中,字…

    other 2023年5月9日
    00
  • x-server的使用

    X-Server的使用攻略 X-Server是一种用于在远程计算机上运行图形界面应用程序的工具。它允许用户在本地计算机运行远程计算机上的图形界面应程序,同时在本地计算机上显示应程序的图形界面。本文将详细介绍X-Server的使用方法。 步骤 以下是使用X-Server进行远程图形界面应用程序的步骤: 下载安装X-Server。 首先,我们需要下载并安装X-S…

    other 2023年5月9日
    00
  • Android自定义PhotoView使用教程

    Android自定义PhotoView使用教程 PhotoView是一个用于在Android应用中显示缩放和平移图片的开源库。通过它,我们可以轻松地实现图片的手势操作,包括缩放、双击放大、拖动等。本教程将详细讲解如何使用和自定义PhotoView。 1. 引入库依赖 在你的项目build.gradle文件中添加以下库依赖: implementation ‘c…

    other 2023年6月25日
    00
  • 关于c#:sigsegv的原因可能是系统故障的原因吗?

    以下是关于“关于c#:sigsegv的原因可能是系统故障的原因吗?”的完整攻略,包含两个示例。 背景 在C#程序中,当出现SIGSEGV错误时,通常是由于访问了无效的内存地址或者试图访问未分配的内存空间。这种错误通常是由于程序中存在缺陷或者错误导致的,而不是系统故障引起的。那么C#程序中出现SIGSEGV错误的原因可能是系统故障吗? 示例一:访问无效的内存地…

    other 2023年5月9日
    00
  • 操作系统是什么?

    操作系统是什么? 操作系统(Operating System,简称OS)是一种系统软件,是计算机硬件和应用程序之间的桥梁,是计算机系统中最基本、最重要的软件之一。操作系统可以管理计算机的硬件(如CPU、内存、硬盘、键盘、鼠标、显示器等),运行应用程序,以及为用户提供操作界面。它也是计算机系统一级软件(firmware)之上的第一层系统软件,其他软件都是建立在…

    其他 2023年4月16日
    00
合作推广
合作推广
分享本页
返回顶部