Next.js项目上传cPanel遇问题:仅显示文件且无server.js等文件
解决Next.js部署到cPanel的两个问题:文件列表显示&无app.js/server.js入口
先搞懂核心逻辑
Next.js 不是传统的Node.js项目(依赖单独的app.js/server.js启动),它的运行依赖预构建的生产包,或者通过官方的next start命令启动服务,不需要你手动写入口文件。
步骤1:本地构建生产版本
在你的本地Next.js项目根目录执行以下命令:
# 构建生产包 npm run build # 可选:如果要静态导出(适合纯静态页面),执行这个命令(Next.js 13+需在next.config.js中配置output: 'export') npm run export
执行完成后会生成:
- 服务器渲染模式:
.next目录 + 项目根的package.json/next.config.js - 静态导出模式:
out目录(里面是所有静态HTML/CSS/JS文件)
步骤2:正确上传文件到cPanel
服务器渲染模式上传内容
只上传以下文件/目录到cPanel的一个子目录(比如~/public_html/next-app,不要直接丢public_html根目录):
.next目录package.jsonpackage-lock.json(或yarn.lock)next.config.js
静态导出模式上传内容
直接把out目录里的所有文件上传到cPanel的public_html根目录,覆盖原有文件。
步骤3:配置cPanel Node.js服务器(仅服务器渲染模式需要)
- 打开cPanel的「Node.js应用管理器」,创建新应用,选择你上传文件的子目录(比如
next-app),并匹配项目的Node.js版本(必须和本地一致)。 - 修改
package.json的启动脚本,添加/修改:
"scripts": { "start": "next start -p [你的端口号]", "build": "next build" }
这里的端口号用cPanel Node.js应用分配给你的端口(创建应用后会显示)。
3. 在Node.js应用管理器中,设置启动命令为npm run start,保存并启动应用。
步骤4:解决浏览器显示文件列表的问题
服务器渲染模式
在cPanel的应用根目录创建.htaccess文件,添加以下规则(替换端口号为你的应用端口):
RewriteEngine On RewriteRule ^(.*)$ http://localhost:[你的端口号]/$1 [P,L]
这个规则会把所有域名请求转发给Next.js服务器,不再显示目录文件列表。
静态导出模式
因为已经把静态文件直接放在public_html根目录,cPanel会自动加载index.html,不会显示文件列表(如果还是显示,检查public_html里是否有index.html,并确保cPanel的目录索引设置优先加载index.html)。
常见坑点
- Node.js版本不兼容:cPanel的Node.js版本必须和本地项目一致,否则会启动失败。
- 路径错误:服务器渲染模式下,应用根目录必须指向你上传
.next和package.json的目录,不能是public_html根目录。
内容的提问来源于stack exchange,提问作者Karan Meghwanshi
相关产品推荐
相关产品推荐

