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

Laravel 8站点根目录非/时,如何保存路径并实现后续重定向?

在Laravel中可靠保存路径并重定向的方法

当站点根目录不是/(比如/path_to_site/)时,手动拼接路径容易出现重复根目录的问题,以下是几种可靠的解决方式:

方案1:直接保存完整URL

这种方式最简单,完全避免路径解析错误:

// 保存当前请求的完整URL到session
session(['intended_url' => $request->fullUrl()]);

// 后续重定向时直接使用保存的完整URL
return redirect(session('intended_url', config('app.url')));

redirect()方法会自动识别绝对URL,不会额外拼接站点根目录,完美适配非根目录部署的场景。

方案2:提取相对于站点根的路径

如果只需要保存相对路径,可以先解析站点根目录,再提取相对路径:

// 获取应用配置的根URL并解析路径部分
$appUrlParts = parse_url(config('app.url'));
$appRootPath = $appUrlParts['path'] ?? '/';

// 解析当前请求的路径和查询参数
$requestUrlParts = parse_url($request->fullUrl());
$requestFullPath = $requestUrlParts['path'] . (isset($requestUrlParts['query']) ? '?' . $requestUrlParts['query'] : '');

// 计算相对于站点根的路径
if ($appRootPath !== '/' && str_starts_with($requestFullPath, $appRootPath)) {
    $relativePath = substr($requestFullPath, strlen($appRootPath));
} else {
    $relativePath = $requestFullPath;
}

// 确保路径以/开头,避免相对路径错误
if (!str_starts_with($relativePath, '/')) {
    $relativePath = '/' . $relativePath;
}

// 保存到session
session(['intended_url' => $relativePath]);

// 重定向时使用相对路径
return redirect(session('intended_url', '/'));

方案3:利用Laravel的intended方法

如果你是在登录场景(即使自定义登录逻辑),可以手动设置url.intendedsession键,然后使用内置方法:

// 保存目标路径到Laravel默认的intended键
session(['url.intended' => $request->fullUrl()]);

// 重定向到目标路径,默认回退到首页
return redirect()->intended('/');

这个方法是Laravel内置的登录后重定向逻辑,天然支持非根目录部署场景。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 10:30:53