NameCheap共享主机部署Express应用出现404错误求助
解决NameCheap共享主机上Express应用的404错误
看起来你遇到的问题是Apache服务器默认优先处理PHP文件,没有把请求转发给你的Express应用——这在NameCheap共享主机的Node.js配置里是个很常见的坑,我来帮你一步步解决:
1. 修正Express的端口配置
NameCheap的Node.js环境会自动分配端口,并通过环境变量传递给你的应用,硬编码3001可能会导致端口不匹配。把你的代码改成这样:
var express = require("express"); var app = express(); // 使用环境变量端口, fallback到3001 const port = process.env.PORT || 3001; app.set("port", port); app.get("/hello", function(req, res) { res.send("hello world"); }); app.listen(app.get("port"), () => console.log("Started listening on %s", app.get("port")) );
2. 添加.htaccess重写规则
因为NameCheap共享主机默认用Apache处理请求,它会优先查找PHP/静态文件,不会自动把请求转发给你的Express服务。在应用根目录(也就是url.com对应的目录)创建或修改.htaccess文件,添加以下规则:
RewriteEngine On # 把根路径请求转发到Node服务 RewriteRule ^$ http://127.0.0.1:%{ENV:PORT}/ [P,L] # 把所有非静态文件/目录的请求转发到Node服务 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ http://127.0.0.1:%{ENV:PORT}/$1 [P,L]
这里用%{ENV:PORT}自动获取主机分配的端口,避免和硬编码端口不一致的问题。
3. 重启你的Node应用
登录NameCheap面板,找到你的Node.js应用,点击重启按钮,让新的配置生效。
完成以上步骤后,再访问http://url.com/hello,应该就能看到预期的hello world了。
内容的提问来源于stack exchange,提问作者Zack Arnett
相关产品推荐
相关产品推荐

