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

Laravel路由where子句配置问题:访问指定URL出现404错误

解决Laravel多步骤向导表单的路由匹配问题

你的问题出在路由正则的写法和参数匹配规则上,调整路由配置就能解决404问题:

方案一:单路由参数匹配所有场景

把路由改成如下写法:

->get('{step}', [StepController::class, 'show'])
->where('step', 'address-sender(/.*)?|address-receiver(/.*)?|shipping-confirmation')
->name('auth.step.show');

关键说明:

  • 原来的address-sender?/*里的?是正则量词,会把sender的最后一个字符设为可选,完全不符合你「匹配address-sender后任意路径」的需求。
  • (/.*)?表示匹配可选的斜杠+任意内容,既能匹配address-sender本身,也能匹配address-sender/manual、address-sender/xxx/yyy这类带后续路径的地址。
  • Laravel默认路由参数不包含斜杠,通过这个正则规则,允许step参数包含斜杠,从而完整匹配后续路径。

方案二:拆分路由提升可读性

如果觉得单正则太复杂,也可以拆成多个路由,逻辑更清晰:

// 匹配address-sender及后续任意子路径
->get('address-sender/{substep?}', [StepController::class, 'show'])
->where('substep', '.*')

// 匹配address-receiver及后续任意子路径
->get('address-receiver/{substep?}', [StepController::class, 'show'])
->where('substep', '.*')

// 匹配shipping-confirmation单独路径
->get('shipping-confirmation', [StepController::class, 'show'])

->name('auth.step.show');

这里给substep添加.*正则规则,允许它匹配任意内容(包括空值,因为参数是可选的{substep?}),这样访问address-sender或者address-sender/manual都能命中路由。

两种方案都能解决你访问address-sender/manual、address-receiver/manual时出现的404问题。

内容的提问来源于stack exchange,提问作者Abdul Shakoor Kakar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 11:57:59