Laravel生产环境重置密码链接异常:APP_URL重复拼接问题求助
嘿,这个问题我之前排查过好几次,大概率是配置或者URL生成逻辑的问题,咱们一步步来解决:
检查.env里的APP_URL配置
先确认你的.env文件中APP_URL的取值是正确的完整域名,比如APP_URL=https://your-domain.com,注意不要带末尾的斜杠,也不要重复写入域名(比如误写成APP_URL=your-domain.com/your-domain.com)。修改后一定要执行php artisan config:cache刷新配置缓存,生产环境下配置缓存不清除的话,新的配置不会生效。检查密码重置邮件模板的URL生成
Laravel默认的重置链接是通过route('password.reset', $token)生成的,如果你自定义了重置密码的邮件模板,可能不小心手动拼接了URL。比如错误写法:{{ env('APP_URL') }}/{{ route('password.reset', $token) }}——这里route()方法本身已经会基于APP_URL生成完整的带域名的URL,再拼接一次就会重复。正确的写法是直接使用{{ route('password.reset', $token) }},或者用{{ url('/password/reset/' . $token) }},这两个方法都会自动生成正确的完整链接。排查路由分组前缀
打开routes/web.php,看看认证相关的路由(比如Auth::routes()或者手动定义的password.reset路由)有没有被错误包裹在带前缀的路由组里。比如如果不小心写成:Route::prefix('App_URL')->group(function () { Auth::routes(); });那生成的路由就会带上
App_URL前缀,导致链接异常。如果是这种情况,去掉这个错误的前缀分组即可。清除路由缓存
生产环境如果开启了路由缓存,修改路由后要执行php artisan route:cache来刷新缓存,不然旧的路由规则还在,生成的URL依然会出错。
一般来说,前两点就是最常见的原因,先从这两个方向排查,应该就能解决问题啦!
内容的提问来源于stack exchange,提问作者Wejdan

