解决vue项目nginx部署到非根目录下刷新空白的问题

下面是解决 Vue 项目在 Nginx 部署非根目录下刷新空白的问题的完整攻略。

问题描述

当 Vue 项目部署在 Nginx 上,并且不是在根目录下,比如在 http://example.com/vueapp 目录下时,直接访问路由会导致刷新后页面空白,浏览器控制台提示 404 错误。

原因分析

这是因为 Vue 项目使用的是前端路由,刷新页面时浏览器会向服务器发送请求,并带上当前路径,Nginx 服务器不知道这个路径,会返回 404 错误。

解决步骤

1. 修改 vue.config.js 配置

在 Vue 项目根目录下的 vue.config.js 文件中,加入以下代码:

module.exports = {
  publicPath: '/vueapp/',
  outputDir: 'dist',
};

其中,publicPath 表示打包后 index.html 引入静态资源的路径,即上面的 http://example.com/vueappoutputDir 表示打包后静态资源的输出目录,这里设为 dist

2. 修改 Nginx 配置

在 Nginx 服务器的配置中,根据情况添加以下配置:

location /vueapp/ {
    alias /path/to/vueapp/dist/;

    try_files $uri $uri/ /vueapp/index.html;
}

其中,/path/to/vueapp/ 修改为 Vue 项目打包后静态资源的路径。try_files 配置了请求文件的优先级,首先尝试请求对应的文件,如果没有再请求 /vueapp/index.html

注意:如果 Nginx 配置中已经有了根路径的配置(location / {}),需要将其放在 /vueapp/ 的配置前,否则会覆盖掉 /vueapp/ 的配置。

3. 重新部署 Vue 项目和 Nginx

修改完配置后,需要重新打包并部署 Vue 项目和重启 Nginx 生效。

示例

假设 Vue 项目打包后的静态资源路径为 /var/www/vueapp/dist/,Nginx 的根路径为 /var/www/,Nginx 的域名为 example.com

  • 修改 vue.config.js
module.exports = {
  publicPath: '/vueapp/',
  outputDir: 'dist',
};
  • 修改 Nginx 配置:
location /vueapp/ {
    alias /var/www/vueapp/dist/;

    try_files $uri $uri/ /vueapp/index.html;
}
  • 重新部署 Vue 项目和 Nginx 生效。控制台打印没有错误信息,页面能够正常访问。

总结

综上,解决 Vue 项目在 Nginx 部署非根目录下刷新空白的问题的完整攻略如下:

  1. 修改 vue.config.js 配置:
module.exports = {
  publicPath: '/vueapp/',
  outputDir: 'dist',
};
  1. 修改 Nginx 配置:
location /vueapp/ {
    alias /path/to/vueapp/dist/;

    try_files $uri $uri/ /vueapp/index.html;
}
  1. 重新部署 Vue 项目和 Nginx 生效。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:解决vue项目nginx部署到非根目录下刷新空白的问题 - Python技术站

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

相关文章

  • 基于vue-cli npm run build之后vendor.js文件过大的解决方法

    一、背景介绍 在使用vue-cli进行项目开发时,当使用npm run build命令对代码进行打包时,会生成一个vendor.js文件,这个文件包含了所有第三方库的代码,而且这个文件可能会非常大,甚至占据整个打包后文件的很大一部分,这会导致页面加载速度缓慢,影响用户体验。本文将介绍几种解决这个问题的方法。 二、解决方法 按需引入第三方库 在进行项目开发时,…

    other 2023年6月27日
    00
  • 爬虫介绍+Jupyter Notebook

    爬虫介绍+Jupyter Notebook的完整攻略 爬虫介绍 爬虫是一种自动化程序,可以模拟人类在互联网上的行为,从网页中提取数据。爬虫通常用于数据挖掘、搜索引擎、价格比较、新闻聚合等领域。爬虫的基本流程包括发送请求、解析响应、提取数据和存储数据。 Jupyter Notebook Jupyter Notebook是一种交互式笔记本,可以在其中编写和运行代…

    other 2023年5月6日
    00
  • MySQL递归查找树形结构(这个方法太实用了!)

    MySQL递归查找树形结构攻略 背景 在实际开发中,往往会遇到需要处理树形结构的需求,而且这些树形结构往往是多层嵌套的。在MySQL中,我们可以通过递归查询的方式来处理树形结构数据,本文将会详细介绍如何使用MySQL来实现递归查询树形结构数据的方法,并提供两个示例说明。 算法思路 递归查询树形结构的整个算法过程主要可以分为以下几步: 查询根节点数据,即根节点…

    other 2023年6月27日
    00
  • python中super().__init__()作用详解

    下面我将详细讲解一下 “python中super().init()作用详解” 的相关知识。 什么是super().init()方法? 在Python中,当我们定义一个子类(派生类)时,如果需要对其父类(基类)的属性或方法进行调用,我们通常使用 super() 函数。super() 函数返回一个临时的对象,通过该对象可以调用父类中的方法。 而对于 super(…

    other 2023年6月27日
    00
  • 通过PLSQL Developer创建Database link,DBMS_Job,Procedure,实现Oracle跨库传输数据的方法(推荐)

    通过PL/SQL Developer创建Database Link, DBMS_Job, Procedure实现Oracle跨库传输数据的方法 以下是使用PL/SQL Developer创建Database Link, DBMS_Job, Procedure实现Oracle跨库传输数据的完整攻略: 创建Database Link: 在PL/SQL Devel…

    other 2023年10月18日
    00
  • python __slots__ 详解(上篇)

    Python slots 详解(上篇) 在Python中,__slots__是一种特殊的属性,用于限制类的实例可以动态添加的属性。本文将为您详细讲解Python __slots__的使用方法和注意事项,包括介绍、方法和两个示例说明。 介绍 Python中的__slots__是一种特殊的属性,用于限制类的实例可以动态添加的属性。使用__slots__可以提高类…

    other 2023年5月6日
    00
  • 面试大厂90%会被问到的Java面试题(附答案)

    以下是详细讲解“面试大厂90%会被问到的Java面试题(附答案)”的完整攻略: 1. 准备阶段 在准备Java面试题之前,首先需要掌握Java语言的基础知识。如果你是初学者,可以通过阅读一些入门书籍或网上教程来学习。另外,也建议尝试一些实践项目来加深理解。 2. 学习重点 在面试中,可能会被问到许多不同的问题,但是Java基础知识和面向对象编程是最主要的学习…

    other 2023年6月26日
    00
  • JDK9为何要将String的底层实现由char[]改成了byte[]

    JDK 9将String的底层实现由char[]改成了byte[]的原因 在JDK 9中,Java的String类的底层实现从使用char[]数组改为了使用byte[]数组。这个改变是为了提高内存使用效率和性能,并且在处理非拉丁字符时能够更好地支持Unicode编码。 1. 内存使用效率 使用byte[]数组作为String的底层实现可以减少内存使用量。在J…

    other 2023年8月2日
    00
合作推广
合作推广
分享本页
返回顶部