使用TinyMCE上传图片时遭遇HTTP Error 403问题求助
解决TinyMCE图片上传403 HTTP Error问题
你遇到的403错误确实大概率和PHP代码里的$accepted_origins配置有关,咱们一步步排查和修复:
1. 确认请求Origin是否匹配允许列表
浏览器发起跨域请求时会携带Origin请求头,你的PHP代码会检查这个值是否在$accepted_origins数组里,不匹配就会返回403。这里常见的问题有:
- 本地开发用的是
http://localhost而非https://localhost(很多本地环境默认不启用HTTPS) - 本地开发带了端口号(比如
http://localhost:8080),但你配置的列表里没加端口 - 线上服务器的Origin地址写错(比如少了
www、协议不对)
修复方案:
修改$accepted_origins数组,加入实际的请求源。比如本地开发场景可以改成:
$accepted_origins = array( "http://localhost", "http://localhost:8080", // 如果有端口的话加上 "https://77.104.172.194" );
2. 处理同域请求的情况
如果你的TinyMCE页面和上传接口是同域名的,浏览器不会发送HTTP_ORIGIN头,这时候你的代码会跳过Origin校验逻辑,但可能导致权限判断遗漏。可以补充同域请求的允许逻辑:
修改PHP里的Origin校验部分:
$accepted_origins = array("http://localhost", "https://77.104.172.194"); $imageFolder = "pictures/Test/"; reset ($_FILES); $temp = current($_FILES); // 新增:处理同域请求(无HTTP_ORIGIN的情况) $isSameOrigin = !isset($_SERVER['HTTP_ORIGIN']); $isAllowedOrigin = $isSameOrigin || (isset($_SERVER['HTTP_ORIGIN']) && in_array($_SERVER['HTTP_ORIGIN'], $accepted_origins)); if (!$isAllowedOrigin) { header("HTTP/1.1 403 Forbidden"); exit; } // 允许跨域的话设置响应头 if (isset($_SERVER['HTTP_ORIGIN'])) { header('Access-Control-Allow-Origin: ' . $_SERVER['HTTP_ORIGIN']); } if (is_uploaded_file($temp['tmp_name'])){ // 后续的文件处理逻辑... }
3. 检查上传目录的权限
除了Origin问题,403错误也可能是服务器没有写入权限到pictures/Test/目录。你需要:
- 确认
pictures/Test/目录存在,不存在的话手动创建 - 给目录设置合适的权限(比如Linux下设置
chmod 755 pictures/Test/,确保服务器进程有读写权限)
补充:前端代码确认
你的前端TinyMCE初始化代码看起来没问题,但可以确认xhr.withCredentials = false是否符合你的场景——如果你的接口需要携带Cookie,这个值要改成true,不过大部分图片上传场景不需要。
内容的提问来源于stack exchange,提问作者Zengi
相关产品推荐
相关产品推荐

