Angular项目中API POST请求报404 Not Found,但Postman调用正常的问题求助
兄弟,别慌!刚入门编程就帮朋友搞网站部署,已经很厉害了,遇到这种问题太正常了,我当初刚折腾Angular部署到cPanel的时候也踩过好几个类似的坑。根据你说的情况——前端在cPanel的public_html/test文件夹里能正常运行,但POST请求就404,Postman调用又没问题——我给你列几个最该先排查的方向:
先盯死浏览器的请求地址! 打开浏览器F12的Network标签,触发那个POST请求,看看实际发送的URL到底是什么。大概率是你Angular代码里的endpoint写得有问题:比如本地开发时用的是绝对路径(比如
http://localhost:3000/api/addtest),部署到cPanel的test子目录后,要么没改成相对路径,要么绝对路径没适配线上域名,导致请求跑到了你的域名/test/https:...这种完全错误的地址,可不就404嘛!检查Angular子目录的.htaccess配置 因为你把Angular部署在test子文件夹里,默认的.htaccess规则可能不对,会把POST请求也重定向到index.html。你可以在test文件夹里创建(或者修改).htaccess文件,内容改成这样:
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase /test/ RewriteRule ^index\.html$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /test/index.html [L] </IfModule>
重点是RewriteBase /test/这一行,必须对应你的子目录名,不然路由和请求路径就会乱套。
排查Angular的HTTP拦截器(如果有的话) 如果你在项目里加了HTTP拦截器,会不会是拦截器里硬编码了本地的API前缀?比如拦截器自动给所有请求加了
/api或者本地域名的前缀,部署到线上后没改,导致请求路径错了。排除下cPanel的文件夹权限(虽然概率低) 既然Postman能正常调用后端,权限应该没啥大问题,但保险起见可以看看test文件夹和后端API对应的文件权限是不是设成了755(文件夹)和644(文件),避免因为权限导致请求被拦截。
你先按上面的步骤一个个查,尤其是第一步看Network里的实际请求URL,那个最能直接定位问题。如果排查完还是有问题,把你的endpoint代码和浏览器里的请求URL贴出来,我再帮你抠细节!
备注:内容来源于stack exchange,提问作者Matteo Lolli




