如何调试Laravel中Ajax请求返回非预期302重定向的问题
排查步骤按优先级依次执行:
第一步:验证路由注册与匹配优先级
先执行命令
php artisan route:list,查看输出列表中是否存在GET /about-info对应的路由条目,确认控制器关联正确。
另外检查web.php中该路由的定义位置,不能放在通配符路由(例如Route::get('/{param}', ...))、带前缀的路由分组之后,Laravel路由采用"先匹配先生效"规则,前面的通配路由会拦截该请求。第二步:清除路由缓存
若你之前开启过路由缓存,修改
web.php后不会自动生效,执行命令php artisan route:clear清除缓存后重试请求。第三步:排查隐式中间件
Laravel默认会给
web.php下的所有路由绑定web中间件组,不需要你主动配置:- 检查
app/Providers/RouteServiceProvider.php中web路由组的中间件配置,确认是否额外加了auth类中间件 - 检查
CMSController的构造方法、以及它继承的父控制器中,是否写了$this->middleware('auth')这类配置 - 打开开发者工具的网络面板,查看302响应的
Location头指向的地址,如果是登录页,则100%是auth中间件拦截导致的
- 检查
第四步:校验请求地址一致性
确认axios请求的地址和路由定义完全一致:
- 不要出现尾斜杠差异(比如请求
/about-info/带斜杠,路由定义是/about-info,默认会触发302重定向到无斜杠地址) - 确认站点路径配置正确,没有多出来的前缀路径
- 不要出现尾斜杠差异(比如请求
第五步:隔离业务逻辑影响
临时注释
aboutInfo方法内的数据库查询逻辑,直接返回固定字符串return 'test';,如果还是返回302,说明问题完全出在路由/中间件层面,和控制器业务逻辑无关。
内容的提问来源于stack exchange,提问作者Artur Müller Romanov
相关产品推荐
相关产品推荐

