Laravel 12.x子域名环境下发送邮件后重定向路由404问题求助
看起来你遇到的是子域名路由上下文在重定向时丢失的问题——路由本身是存在的,但Laravel生成重定向URL时没带上admin子域名,导致请求落到主域名下找不到对应路由,触发了404。下面是几个实用的排查和解决思路:
1. 先确认路由是否正确注册
首先运行这条命令,检查admin.users.index路由的完整信息:
php artisan route:list --name=admin.users.index
你应该能看到这条路由的Domain列显示为admin.mysite.test,URI是/users,Name是admin.users.index。如果这条路由没出现在列表里,先检查路由文件的语法(比如有没有遗漏括号),然后清除路由缓存:
php artisan route:clear
2. 显式指定子域名生成路由
问题大概率出在redirect()->route('admin.users.index')这行代码上。虽然你的控制器属于admin子域名的路由组,但Laravel有时候不会自动继承当前请求的子域名上下文(尤其是执行完邮件发送这类操作后)。你可以手动在路由生成时指定domain参数:
修改store方法里的重定向代码:
return redirect()->route( 'admin.users.index', [], // 路由参数(这里无参数,留空数组即可) ['domain' => 'admin.' . env('SITE_URL')] // 显式指定子域名 )->with('success-message', 'Record inserito con successo.');
或者更灵活一点,直接从当前请求中获取子域名(避免硬编码):
return redirect()->route( 'admin.users.index', [], ['domain' => request()->getHost()] )->with('success-message', 'Record inserito con successo.');
这样生成的重定向URL就会是http://admin.mysite.test/users,而非主域名下的地址,自然就能找到对应的路由了。
3. 补充排查:会话与配置缓存
你的.env里SESSION_DOMAIN=.mysite.test是正确的(支持跨子域名会话),但如果之前改过相关配置,记得清除缓存确保配置生效:
php artisan cache:clear php artisan config:clear
4. 排查邮件类是否干扰请求上下文
虽然可能性较低,但如果你的NewUserCreated邮件类里有修改请求、路由相关的逻辑,可能会意外改变当前请求的上下文。可以先临时注释掉邮件发送代码,测试重定向是否正常——如果正常,那就是邮件类里的逻辑有问题,需要检查邮件类的代码。
按照这个步骤试一下,应该能解决你的重定向404问题。
内容来源于stack exchange

