ThinkPHP6.0页面重定向核心是return redirect(),支持路由名、完整URL、带参数三种形式;需避免响应体已输出导致失效;提示跳转用success()/error(),传值用with(),返回来源页用remember()/restore();API中不可用redirect(),应返回JSON结构由前端处理。

ThinkPHP6.0 实现页面重定向,核心方法是 return redirect(),它返回一个 HTTP 302 响应对象,必须用 return 显式返回,否则无效。
推荐写法:使用 redirect() 辅助函数
在控制器中直接调用全局助手函数 redirect(),支持三种常用形式:
-
跳转到路由名(最安全):
return redirect('user/profile');—— 按「控制器/方法」书写,不带域名、不加index.php,自动适配当前路由配置(含后缀如.html) -
跳转到完整 URL:
return redirect('https://example.com/login');—— 必须带http://或https://协议,否则会被当成相对路径拼接 -
带参数跳转:
return redirect('order/detail', ['id' => 123, 'tab' => 'log']);—— 参数自动拼为 query string;含中文时需提前urlencode(),例如['name' => urlencode('张三')]
关键注意事项:避免静默失败
redirect() 依赖 HTTP 响应头 Location,一旦响应体已开始输出,就会失效且不报错。常见原因包括:
- 控制器中写了
echo、var_dump()或调试语句 - 前置中间件里调用了
Response::create()->send()或exit - 在
__destruct()、finally块中调用 - 开启调试模式后输出了 Trace 信息(如开发环境未关闭 debug)
特殊场景处理
需要提示页再跳转? 用 $this->success() 或 $this->error(),它们会渲染跳转模板(默认 dispatch_jump.tpl),并支持自定义等待时间、提示文案和目标地址。
立即学习“PHP免费学习笔记(深入)”;
想传值给下个请求? 配合 ->with('key', 'value') 使用 Session 闪存数据,仅对下一次请求有效。
要记住来源页并返回? 调用 ->remember(),之后在目标操作中用 redirect()->restore() 回跳。
API 接口不能用 redirect()
API 返回 JSON,浏览器或前端框架通常不自动跟随 302 重定向。正确做法是返回标准结构,例如:
{"code": 302, "redirect_url": "/login"}
由前端 JavaScript 判断并执行 window.location.href = data.redirect_url。



















