Node.js服务器部署至cPanel后仅根路由可用,Express路由失效排查
cPanel应用挂载路径与Express路由不匹配
检查cPanel中Node.js应用的挂载点设置,如果应用被挂载在子域名的某个子路径下(比如sub.example.com/app),但Express路由是基于根路径/定义的,就会导致非根路由无法匹配。解决方法:要么在Express中给所有路由添加对应前缀(比如用app.use('/app', router)),要么调整cPanel的应用挂载点到子域名根目录。.htaccess反向代理规则错误
cPanel部署Node.js依赖.htaccess做请求转发,如果规则未正确传递路由参数,非根路由会被拦截。确保你的.htaccess包含完整的路由转发规则:RewriteEngine On # 转发根路径请求 RewriteRule ^$ http://127.0.0.1:XXXX/ [P,L] # 转发非静态文件/目录的所有请求,保留路由参数 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ http://127.0.0.1:XXXX/$1 [P,L]其中
XXXX是cPanel分配给你的Node.js应用端口,注意规则中的$1必须保留,否则路由参数会丢失。Express路由中间件顺序错误
检查Express代码中路由的定义顺序:如果express.static中间件或其他全局中间件放在了路由定义之后,或者404处理中间件(app.use((req,res)=>res.sendStatus(404)))放在了业务路由之前,会导致非根路由被提前拦截。确保业务路由的定义在静态文件中间件之后、404中间件之前。cPanel应用缓存或未重启
修改配置后未重启Node.js应用,cPanel可能仍在使用旧的路由配置。进入cPanel的Node.js Selector页面,找到你的应用,点击Restart按钮,确保配置生效。查看应用日志排查请求状态
在cPanel的Node.js应用管理界面,找到Logs选项,查看请求日志。如果非根路由的请求根本没到达Node.js服务器,说明是反向代理或虚拟主机配置问题;如果日志显示404,说明路由定义存在问题,需要检查路由路径是否拼写错误、是否正确挂载了路由模块。虚拟主机或子域名配置限制
检查子域名的虚拟主机配置,确保没有设置仅允许根路径访问的规则,比如某些安全插件或cPanel的目录保护设置,可能会拦截非根路径的请求。
内容的提问来源于stack exchange,提问作者CodeWith Mufaddal

