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

Laravel中fullUrlWithQuery自动添加_token字段的原因及解决方法

为什么fullUrlWithQuery会自动添加_token?

这个问题的核心原因很明确:fullUrlWithQuery()方法的设计逻辑是保留当前请求中已有的所有查询参数,再合并你传入的新参数。如果你的当前页面请求(比如刚提交过表单后跳转过来,或者当前URL本身就携带了_token)的查询参数里已经包含_token,这个方法就会默认把它带到新生成的URL里。

正常来说Laravel的CSRF Token是通过POST表单的隐藏字段传递的,但如果你的请求是通过GET方式带上了_token(比如某些不规范的跳转逻辑),它就会被包含在当前请求的查询参数中,进而被fullUrlWithQuery()继承。

如何阻止它添加_token?

这里有两种靠谱的解决方法,你可以根据自己的需求选择:

方法一:过滤原有参数后再合并

先把当前请求里的_token参数剔除,再和你要添加的新参数合并,最后生成URL:

<li>
    <a href="{{ request()->fullUrlWithQuery(
        array_merge(request()->query()->except('_token'), ['price' => 'low-high'])
    ) }}">
        Low-High
    </a>
</li>

request()->query()->except('_token')会获取当前请求中除_token外的所有查询参数,再和price参数合并,这样生成的URL就不会包含多余的_token了,同时还能保留其他你需要的原有参数。

方法二:直接基于当前路径构建URL

如果你不需要保留当前请求的其他查询参数,完全可以直接用当前页面的基础URL,手动拼接新的查询参数:

<li>
    <a href="{{ url()->current() . '?' . http_build_query(['price' => 'low-high']) }}">
        Low-High
    </a>
</li>

这种方式更简洁,适合只需要添加price参数、不需要保留其他原有查询参数的场景。

额外建议

如果_token是意外出现在当前请求的URL里,建议检查一下页面的表单提交逻辑——规范的做法是CSRF Token通过POST请求的表单字段传递,而不是出现在GET请求的URL中。从根源上避免GET请求携带_token,也能彻底解决这个问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:51:03