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
相关产品推荐
相关产品推荐

