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

PHP header跳转报错:请求URL未找到,手动访问链接正常

问题分析与解决方案

你遇到的跳转错误,核心问题出在header()函数的字符串引号使用错误,还有一个容易被忽略的执行顺序问题,我来帮你一步步梳理:

1. 变量未解析的关键原因

看你代码里的这行跳转代码:

header('Location: .$final_link');

PHP里有个重要规则:单引号包裹的字符串不会解析内部的变量,所以服务器实际收到的跳转地址是字面量.$final_link,而不是你拼接好的真实URL——这就是为什么手动访问链接正常,但用header跳转时会报错“请求的URL /.$final_link 未找到”。

2. 两种可行的修正方案

方式一:改用双引号(推荐,写法更简洁)

双引号会自动解析内部的变量,直接把变量放进去就行:

header("Location: $final_link");

方式二:字符串拼接(适合习惯用单引号的场景)

把单引号字符串和变量用.拼接起来,也能正确传递URL:

header('Location: ' . $final_link);

3. 额外注意:输出顺序与session销毁的问题

  • 你代码里先执行了echo $final_link;,这会向浏览器输出内容,而header()函数必须在任何输出(包括echo、HTML标签、甚至代码开头的空格)之前调用,否则会触发PHP警告,甚至导致跳转失效。如果只是调试用echo,上线前记得删掉;如果需要记录链接,可以用error_log($final_link)代替,把内容写到服务器日志里,不会影响header发送。
  • 另外,exit;语句之后的代码永远不会执行,所以你现在写的unset($_SESSION...)根本不会运行。如果需要销毁这些session变量,要把它们放到header()和exit之前,或者在跳转后的目标页面里处理session销毁。

修正后的完整代码示例:

<?php 
session_start(); 
$user_id = $_SESSION['user_id']; 
$api_id = $_SESSION['api_id']; 
$limit = $_SESSION['limit']; 
$final_link = 'http://www.mywebsite.info/payment/public/createPayment/' .$user_id .'/' .$api_id .'/' .$limit; 

// 调试用:把链接写入日志,避免影响header
// error_log($final_link);

// 先销毁session变量,再跳转
unset($_SESSION["user_id"]); 
unset($_SESSION["api_id"]); 
unset($_SESSION["limit"]);

header("Location: $final_link"); 
exit; 
?>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:44:01