You need to enable JavaScript to run this app. Ubuntu部署多CRA React应用 刷新或加斜杠报EISDIR错误如何解决
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu部署多CRA React应用 刷新或加斜杠报EISDIR错误如何解决

EISDIR报错的核心根因

这是操作系统层面抛出的“试图将目录作为普通文件读取”的系统错误,和CRA的构建配置(PUBLIC_URL、homepage参数)完全无关——错误来源是部署用的静态Web服务器(Nginx/Apache等)的路径映射逻辑缺陷。
当你访问带末尾斜杠的路径(如/app1/)、或是触发前端路由跳转后刷新页面时,服务器没有正确将目录请求映射到对应静态构建目录下的index.html文件,反而尝试把物理磁盘上的目录本身当成可读取的文件去响应请求,就会触发EISDIR报错。
你之前调整PUBLIC_URL、homepage的操作,本质是修改构建产物里的静态资源引用路径,完全不触碰服务器层的请求解析逻辑,自然无法解决问题。

对应修复步骤

调整静态服务器配置(核心修复)

根据你实际使用的静态服务软件匹配修改:

  • 若使用Nginx部署
    1. 定位到/app1、/app2对应的location配置段
    2. 参考如下逻辑调整核心配置:
      # app1 路径映射
      location /app1/ {
          # 填写app1构建产物实际存放的物理绝对路径,末尾要带斜杠
          alias /var/www/react-apps/app1/build/;
          index index.html;
          # 关键:配置路径兜底,避免目录被误读为文件
          try_files $uri $uri/ /app1/index.html;
      }
      # app2 路径映射
      location /app2/ {
          alias /var/www/react-apps/app2/build/;
          index index.html;
          try_files $uri $uri/ /app2/index.html;
      }
      
    3. 执行nginx -t校验配置语法,确认无错后执行reload让配置生效
  • 若使用Apache部署
    1. 找到两个应用对应物理目录的配置块
    2. 确认配置中开启了DirectoryIndex index.html,移除会拦截目录访问的冗余规则,保证目录请求会自动返回目录下的index.html文件

对齐CRA构建参数

服务器配置修复完成后,再反向调整前端项目的构建配置,避免路径不匹配:

  • app1项目的package.json中设置"homepage": "/app1"(末尾无多余斜杠)
  • app2项目的package.json中设置"homepage": "/app2"
  • 不需要额外在.env.production中重复设置PUBLIC_URL,CRA会自动读取homepage的值生成正确的静态资源引用路径,避免两个配置值不一致引发的资源404。
常见踩坑规避
  • 配置Nginx路径映射时,不要把alias写成root:如果用root配置,Nginx会自动把请求路径拼接到物理根路径后,去查找/var/www/react-apps/app1/build/app1/这类不存在的嵌套目录,进一步触发路径解析错误
  • 建议对不带末尾斜杠的访问路径(如https://example.com/app1)配置301重定向到带斜杠的路径(https://example.com/app1/),减少路径匹配逻辑的混乱

内容的提问来源于stack exchange,提问作者Игор Ташевски

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.30 09:45:01