Laravel中CURL请求返回301 Moved Permanently问题求助
解决CURL返回301 Moved Permanently的问题
Hey,碰到本地正常、服务器上CURL返回301的问题确实挺闹心的,我帮你梳理几个实用的排查和解决方向:
开启CURL的重定向跟随
301是永久重定向,默认情况下CURL不会自动跟随跳转,本地环境可能因为配置或者依赖库的差异自动处理了,但服务器没开这个选项。直接在你的代码里加一行:curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);注意:如果服务器开启了
safe_mode或者设置了open_basedir,这个选项可能失效,这时候你需要手动处理重定向——通过curl_getinfo获取重定向目标URL,再重新发起请求。检查目标URL的协议与路径
- 协议差异:本地可能用HTTP访问目标站点,但服务器上目标站点强制跳转到HTTPS(或者反过来),直接把构造的
$url改成对应协议试试。 - 路径大小写:Linux服务器是区分路径大小写的,Windows本地不区分。检查你拼接的
$route和$id里的路径是否和目标站点的实际路径大小写一致,比如本地用/api/Data没问题,服务器上必须写成/api/data才正确。
- 协议差异:本地可能用HTTP访问目标站点,但服务器上目标站点强制跳转到HTTPS(或者反过来),直接把构造的
排查请求头与请求方法的问题
- 你代码里设置了自定义头
url: ACCESS_URL,确认这个ACCESS_URL在服务器环境中是可访问的,有些服务器会拦截不规范的自定义头,或者这个头的值在服务器上解析有问题。 - 检查
CURLOPT_POST的参数$type:如果你实际需要发送GET请求,$type应该设为false,否则会以POST方式请求,可能目标站点的POST接口配置了重定向。
- 你代码里设置了自定义头
打印详细调试信息定位问题
给代码加上错误和响应信息打印,能直观看到重定向的目标URL和具体错误:$output = curl_exec($ch); if(curl_errno($ch)){ echo 'Curl错误信息: ' . curl_error($ch); } // 打印请求和响应的详细信息 $curlInfo = curl_getinfo($ch); print_r($curlInfo); curl_close($ch);从
$curlInfo里的redirect_url字段就能看到服务器要跳转到哪个地址,顺着这个方向排查就清晰多了。
内容的提问来源于stack exchange,提问作者user3721008
相关产品推荐
相关产品推荐

