没有不值得去解决的问题,也没有不值得去学习的技术!

在 Laravel 6 中,基于后置中间件统一处理 302 跳转后的请求查询参数丢失问题

在 Laravel 6 中,带查询参数的请求,在 302 跳转后,查询参数丢失

1、在 Laravel 6 中,带查询参数的请求,在 302 跳转后,查询参数丢失。如图1

在 Laravel 6 中,带查询参数的请求,在 302 跳转后,查询参数丢失
图1

2、原计划在具体的请求时,判断此查询参数是否存在,如果存在,则在 302 跳转后,自动带上。但是此方案,无法避免后续可能还存在着其他的请求也有类似的问题。最终决定,基于后置中间件统一处理 302 跳转后的请求查询参数丢失问题。

3、将新建的中间件放入 web 中间件组,因为其仅需要应用于 Web UI 。



    /**
     * The application's route middleware groups.
     *
     * @var array
     */
    protected $middlewareGroups = [
        'web' => [
            // ...
            \App\Http\Middleware\ThemeEditorQueryParam::class,
        ]
    ];



4、在一个控制器方法中实现 重定向到命名路由


return redirect()->route('account_login');


5、基于 league/uri 添加查询参数,执行 composer require league/uri-components、composer require league/uri。可参考:在 PHP 7.4 中,针对 URI ,基于 league/uri 添加查询参数

6、中间件中的代码实现如下

<?php
 
namespace App\Http\Middleware;
 
use Closure;
use Illuminate\Http\RedirectResponse;
use League\Uri\Uri;
use League\Uri\UriModifier;
 
class ThemeEditorQueryParam
{
    /**
     * Handle an incoming request.
     *
     * @param \Illuminate\Http\Request $request
     * @param \Closure $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        $response = $next($request);
 
        // 当响应为重定向时,判断请求中是否存在请求参数:oseid
        if ($response instanceof RedirectResponse) {
            $oseid = $request->query('oseid'); // 主题编辑器的主题的预览(2.0)
            if (isset($oseid)) {
                $uri = Uri::createFromString($response->getTargetUrl());
                $editorUri = UriModifier::mergeQuery($uri, 'oseid=' . $oseid);
                $response->setTargetUrl($editorUri->jsonSerialize());
            }
        }
 
        return $response;
    }
}

7、打开网址:https://xxx.local/products/ri-yuan-ce-shi-bian-zhong?variant=656 ,不带 oseid 参数,302 跳转至:https://xxx.local/account/login 。符合预期。如图2

打开网址:https://xxx.local/products/ri-yuan-ce-shi-bian-zhong?variant=656 ,不带 oseid 参数,302 跳转至:https://xxx.local/account/login 。符合预期
图2

8、打开网址:https://xxx.local/products/ri-yuan-ce-shi-bian-zhong?variant=656&oseid=6462e3db4cd20 ,有带 oseid 参数,302 跳转至:https://xxx.local/account/login?oseid=6462e3db4cd20 。符合预期。如图3

打开网址:https://xxx.local/products/ri-yuan-ce-shi-bian-zhong?variant=656&oseid=6462e3db4cd20 ,有带 oseid 参数,302 跳转至:https://xxx.local/account/login?oseid=6462e3db4cd20 。符合预期
图3

PHP / Laravel / Yii2 老项目维护与长期技术支持

如果你的 PHP / Laravel / Yii2 项目已经上线,但遇到原开发离职、Bug 长期无人修复、接口不稳定、性能下降、代码难以接手等问题,可以联系我做一次远程技术排查。

适合以下情况:
✅ 老旧 PHP 系统无人维护
✅ Laravel / Yii2 项目 Bug 修复
✅ 后台管理系统小功能迭代
✅ RESTful API 接口排查
✅ MySQL / Redis / Nginx 性能问题
✅ 长期远程兼职维护

可先从一次小问题开始:
✅ 线上报错排查
✅ 接口异常分析
✅ 慢查询与性能瓶颈定位
✅ 代码结构初步评估
✅ 部署环境与日志检查

如需咨询,请联系我,并注明:PHP 维护咨询

联系方式:
Telegram:@shuijingwan
微信:13980074657
邮箱:shuijingwanwq@gmail.com

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理