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

Laravel 8搭配Inertiajs重定向时如何保留URL末尾的哈希值

问题原因

你调用的withFragment方法在Laravel端逻辑是完全正常的,哈希丢失的根源是Laravel 8配套的低版本Inertia.js(v0.x版本)的重定向处理逻辑:Inertia默认处理后端返回的重定向响应时,只会提取URL的路径、查询参数部分,会主动丢弃哈希片段,所以才会出现你遇到的问题。

修复方法

这里提供两种适配不同场景的解决方案:

方案1:走原生浏览器重定向(最简单快速)

直接将哈希拼接在URL末尾,使用away方法生成外部重定向响应,Inertia遇到这类响应会直接调用浏览器原生重定向逻辑,哈希会被完整保留:

// 替换原有重定向代码即可
$url = url("/questions/{$question->slug}#{$newAnswer->id}");
return redirect()->away($url);

注意:该方案会触发页面全量刷新,丢失Inertia单页应用的无刷新跳转体验。

方案2:前端手动拼接哈希(保留单页体验)

如果要保留Inertia的无刷新跳转特性,可以通过闪存参数传递哈希值,前端主动设置:

  1. 后端修改重定向逻辑,通过with方法闪存哈希值:
return redirect($url)->with('answer_fragment', $newAnswer->id);
  1. 在对应问题详情的React组件中,读取Inertia传递的闪存参数,挂载时手动设置哈希:
import { usePage } from '@inertiajs/inertia-react'
import { useEffect } from 'react'

function QuestionDetail() {
  const { answer_fragment } = usePage().props

  useEffect(() => {
    if (answer_fragment) {
      window.location.hash = answer_fragment
    }
  }, [answer_fragment])

  // 页面其余业务逻辑
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 00:06:04