You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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才正确。
  • 排查请求头与请求方法的问题

    • 你代码里设置了自定义头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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:16:50