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

PHP header跳转无法传递GET参数 求排查错误原因

解决Header重定向时GET参数丢失的问题

兄弟,我一眼就发现你代码里的关键问题了——发送重定向Header之后没有立刻终止脚本执行,这就是为什么echo输出的URL参数正常,但浏览器地址栏里的参数却全是空的原因!

问题根源

当你调用header('Location: ...')之后,PHP脚本并不会自动停止,它会继续执行后面的echo语句。这会导致浏览器接收到的HTTP响应同时包含重定向Header和echo输出的内容,破坏了HTTP响应的规范格式。浏览器在解析这种不规范的响应时,可能无法正确识别重定向的完整URL,最终出现参数丢失的情况。

修复步骤

1. 必须在Header后终止脚本

发送完重定向Header之后,立即调用exit()或者die(),让脚本停止执行,确保只有重定向指令被发送到浏览器。

2. 优化变量初始化(避免未定义变量警告)

你的代码里如果某个$_GET参数不存在,对应的变量就没有定义,虽然urlencode()会把未定义变量转成空字符串,但提前初始化所有变量能让代码更健壮,还能避免PHP抛出未定义变量的警告。

修正后的完整代码

// 提前初始化并编码所有参数,避免重复操作和未定义变量问题
$ref = isset($_GET['ref']) ? urlencode($_GET['ref']) : '';
$ad = isset($_GET['placem']) ? urlencode($_GET['placem']) : '';
$adset = isset($_GET['dse']) ? urlencode($_GET['dse']) : '';
$campaign = isset($_GET['cmp']) ? urlencode($_GET['cmp']) : '';
$audience = isset($_GET['aud']) ? urlencode($_GET['aud']) : '';
$gender = isset($_GET['gen']) ? urlencode($_GET['gen']) : '';
$subid1 = isset($_GET['sub1']) ? urlencode($_GET['sub1']) : '';

if (isset($_GET['fb_login'])) {
    // 拼接成单独的变量,代码更易读
    $redirectUrl = "/functions/fb_login.php?ref={$ref}&placem={$ad}&dse={$adset}&cmp={$campaign}&aud={$audience}&gen={$gender}&sub1={$subid1}";
    header("Location: {$redirectUrl}");
    // 关键:终止脚本,避免后续输出干扰响应
    exit();
}

// 调试用的echo只会在不触发重定向时执行
echo "Location: /functions/fb_login.php?ref={$ref}&placem={$ad}&dse={$adset}&cmp={$campaign}&aud={$audience}&gen={$gender}&sub1={$subid1}";

额外小提示

你之前在URL里用了&(HTML实体),这其实是多余的——在PHP的Header中直接用&就可以了,&是用于HTML页面内的链接,不是HTTP头里的URL格式。

内容的提问来源于stack exchange,提问作者Ricardo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:53:13