当前位置: 首页 > 知识库问答 >
问题:

javascript - window.open打开本地nginx部署项目路由报错404?

家浩瀚
2024-08-01
nginx 配置
server {
        listen 90;
        server_name localhost; # 服务器域名或 IP 地址
        location / {
                root   D:/nginx-1.24.0/html/dist;
                index  index.html index.htm projectb.html;
 try_files $uri $uri/ /index.html;
            }
    }

vue配置

const routes = [
  {
    path: '/',
    name: 'Index',
    component: Index,
  },
  {
     path: '/scanCodeScreen',
    name: 'scanCodeScreen',
     component: scanCodeScreen,
  },
  {
    path: '/IndexOld',
    name: 'IndexOld',
    component: IndexOld,
  },
]

const router = new VueRouter({
  mode: 'history', //去掉url中的#
  base: '/',
  routes,
})

export default router

window.open('http://localhost:90/scanCodeScreen', '_blank'); 报错404
image.png
image.png

共有3个答案

拓拔谭三
2024-08-01

改成这样 不要用磁盘路径

server {
        listen 90;
        server_name localhost; # 服务器域名或 IP 地址
        location / {
                root   html;
                index  index.html index.htm;
                try_files $uri  /dist/index.html;
            }
    }
公良渝
2024-08-01

nginx 如果想支持 SPA 的话需要增加 try_files 你没有,那肯定是不支持 SPA 刷新的。

try_files $uri $uri/ /xxx/index.html;

邢鸿博
2024-08-01

当你使用 Vue.js 的 history 模式,并且尝试通过 window.open 打开一个新的浏览器标签页或窗口以访问 Vue 路由(如 /scanCodeScreen),你可能会遇到 404 错误,因为 Nginx 默认配置并不理解 Vue 路由的动态特性。

在 Vue Router 的 history 模式下,所有的路由都是通过 JavaScript 动态处理的,并不会真正请求服务器上的文件。因此,当你尝试直接通过 URL 访问 /scanCodeScreen 时,Nginx 会尝试在配置的 root 目录下找到名为 scanCodeScreen 的文件或目录,但显然这是不存在的,所以返回 404 错误。

要解决这个问题,你需要配置 Nginx 以确保对前端路由的所有请求都返回 index.html 文件,这样 Vue Router 就可以接管 URL 并显示正确的页面。你可以通过修改 Nginx 的 location 块来实现这一点:

server {
    listen 90;
    server_name localhost;

    location / {
        root   D:/nginx-1.24.0/html/dist;
        try_files $uri $uri/ /index.html; # 尝试直接找到文件或目录,否则返回 index.html
        index  index.html index.htm projectb.html;
    }
}

这里的关键是 try_files $uri $uri/ /index.html; 这一行。它会首先尝试直接服务请求的文件($uri)或目录($uri/),如果都不存在,则回退到 index.html。这样,无论请求什么 Vue 路由,Nginx 都会返回 index.html,然后 Vue Router 会接管并显示正确的页面。

确保你的 Vue 应用已经正确部署到 D:/nginx-1.24.0/html/dist 目录下,并且所有相关的资源文件(如 JavaScript、CSS 等)都可以被正确加载。此外,检查 Nginx 配置文件后,不要忘记重新加载 Nginx 以应用更改。你可以通过运行 nginx -s reload 命令来重新加载 Nginx。

 类似资料:
  • 项目使用 nuxt2 写的, 现在进行了 npm run build 打包, 想在生产环境中使用docker部署,部署方式如下 上传项目 将打包后的 .nuxt, static, nuxt.config.js, package.json, node_modules上传至服务器 /home/wwwroot/default 下 (nginx等的配置略) 在项目目录创建启动文件 ecosystem.co

  • 因为某些需求,需要把前后端部署在同一个端口,配置nginx反向代理,如下 在运行时已经将80端口映射到8848,并且能正确访问前端的页面。我预期是访问http://localhost:8848/zssrapi/xxx时能转到后端实际端口http://localhost:8123/zssrapi/xxx。但是尝试之后报错404,如图, 求助解决办法qaq

  • 今天的目标是完成一个 Python Web 项目的线上部署,我们使用最新的 Django 项目搭建一个简易的 Web 工程,然后基于 Nginx 服务部署该 Python Web 项目。 1. 前期准备 1.1 安装虚拟环境pyenv 首先要知道,使用虚拟环境逐渐成了 python 项目开发中的一种主流方式。pyenv 可以帮我们生成多个 python 的虚拟环境,这样我可以在同一台机器上使用 p

  • 本文向大家介绍Python开发之Nginx+uWSGI+virtualenv多项目部署教程,包括了Python开发之Nginx+uWSGI+virtualenv多项目部署教程的使用技巧和注意事项,需要的朋友参考一下 1、新建独立运行环境,命名为env 2、激活虚拟环境 [root@vultr projects]# source env/bin/activate 执行后命令提示符前面会出现一个env

  • 本文向大家介绍在Nginx上部署ThinkPHP项目教程,包括了在Nginx上部署ThinkPHP项目教程的使用技巧和注意事项,需要的朋友参考一下 前段时间用Apache配合TP开发了一个小型网站,也算是我使用TP的第一次实战。我习惯使用pathinfo模式,本地运行一切正常,然而部署到服务器上时,由于对方使用的是Nginx,默认是不支持ThinkPHP的pathinfo模式,所以导致路径错误,出

  • vue 项目打包报错? 应该怎么调整? package.json