Laravel接收ClickFunnels Webhook报301 Moved Permanently错误如何解决
Laravel接收ClickFunnels Webhook返回301重定向的排查方案
301永久重定向错误基本都是路由匹配规则、服务器层跳转配置导致的,按以下优先级排查即可:
- 核对Webhook地址和路由定义完全一致
首先检查ClickFunnels后台填写的Webhook地址,确认末尾没有多余的/。绝大多数Nginx/Apache默认配置会对末尾带斜杠的非目录路径做301重定向,跳转到不带斜杠的对应路径,而Webhook客户端默认不会跟随POST请求的重定向,直接抛出301错误。你当前定义的路由是funnel_webhooks/test,对应正确地址就是https://dotapp.itulbuild.com/funnel_webhooks/test,不要加任何后缀字符。 - 修复反向代理HTTPS信任问题
如果你的站点用了CDN、宝塔面板、负载均衡等反向代理服务,Laravel默认不信任代理服务器转发的请求头,会把代理传过来的HTTPS请求识别为HTTP请求,自动返回301跳转到HTTPS版本的同路径。
打开app/Http/Middleware/TrustProxies.php文件,修改$proxies属性为*,信任所有代理:protected $proxies = '*'; - 本地重放请求定位跳转来源
如果以上两个配置改完还是报错,直接用curl发POST请求到目标地址,看响应头的Location字段就能定位跳转规则来源:curl -X POST https://dotapp.itulbuild.com/funnel_webhooks/test -d "event=purchase_created" -v- 如果Location值是同路径仅末尾斜杠差异:调整服务器重写规则,关闭对该路径的斜杠强制跳转
- 如果Location值是同路径仅http/https协议差异:回到上一步检查信任代理配置,或者检查服务器侧的HTTP强制跳转规则有没有逻辑错误
- 如果Location值是其他路径:检查Laravel全局中间件、路由文件里有没有写全局路径跳转规则,针对性移除即可
- 提前处理后续会碰到的CSRF拦截问题
301问题解决后,第三方POST请求会被Laravel默认的CSRF校验拦截返回419错误,提前把Webhook路径加入CSRF白名单:打开app/Http/Middleware/VerifyCsrfToken.php,在排除数组里加入对应路径:protected $except = [ 'funnel_webhooks/test', ];
内容的提问来源于stack exchange,提问作者Raman Singh
相关产品推荐
相关产品推荐

