Angular4+PHPMailer表单发邮件报404错误,求技术排查
排查Angular调用PHP邮件接口返回404的问题
首先,404错误的核心是服务器找不到你请求的sendemail.php文件,和PHP代码逻辑关系不大,咱们一步步来定位问题:
1. 先确认sendemail.php的实际访问路径是否正确
你在Angular服务里写的路径../../../api/sendemail.php,是相对于Angular编译后的main.js文件位置的,不是源码里的文件位置!
举个实际场景的例子:
- Angular项目编译后,所有前端文件会打包到
dist/你的项目名目录下 - 如果你的
api文件夹和dist目录同级(比如项目根目录下同时有api和dist两个文件夹),那正确的相对路径应该是../api/sendemail.php - 更稳妥的方式是使用绝对路径,比如
/api/sendemail.php(前提是你的服务器根目录下存在api文件夹,且里面有sendemail.php)
快速测试方法:直接在浏览器地址栏输入你认为正确的完整URL(比如http://你的服务器域名/api/sendemail.php),如果返回404,说明路径肯定不对,先调整文件位置或请求路径。
2. 检查服务器的路由重写配置(常见坑点)
如果你的Angular项目启用了HTML5模式的路由,通常会在服务器配置里添加重写规则,把所有请求都指向Angular的index.html,这会导致/api/sendemail.php的请求也被拦截,最终返回404或Angular的页面。
如果你用Apache服务器:
在项目根目录的.htaccess文件中,修改重写规则,排除api目录的请求:
RewriteEngine On # 排除api目录的请求,不让它被Angular路由拦截 RewriteCond %{REQUEST_URI} !^/api/ RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -f [OR] RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -d RewriteRule ^ - [L] RewriteRule ^ /index.html
如果你用Nginx服务器:
在server配置块里添加对api目录的单独处理:
# 优先处理api目录下的PHP请求 location /api { try_files $uri $uri/ =404; } # 其他请求交给Angular路由处理 location / { try_files $uri $uri/ /index.html; }
3. 验证PHP文件的存在和权限
- 确认
sendemail.php确实存在于你配置的路径下,注意Linux服务器区分文件名大小写,别出现SendEmail.php和sendemail.php的大小写错误 - 确保服务器对该文件有读取权限,比如给文件设置
644权限,文件夹设置755权限
4. 额外提醒:PHP代码的依赖路径
等404问题解决后,还要确认PHP里的PHPMailer依赖路径是否正确:
require 'includes/phpmailer/src/Exception.php';
这个路径是相对于sendemail.php的位置,比如如果sendemail.php在api/目录下,那includes文件夹应该在api/includes/,否则会出现PHP的文件找不到错误。
内容的提问来源于stack exchange,提问作者Matheus Batista
相关产品推荐
相关产品推荐

