Laravel中通过Ajax带参数重定向页面报404错误如何解决
问题原因
404错误的核心原因是当前路由定义仅匹配无参数的/verify路径,没有配置匹配/verify/{token}格式路径的路由规则,访问带token后缀的地址时框架找不到对应路由,直接抛出404响应。
另外你的Ajax跳转用了相对路径,如果当前发起请求的页面不在站点根目录,还会出现路径拼接错误的问题,进一步触发404。
解决步骤
第一步:修改路由定义,增加token参数匹配
把原来的路由代码替换为带参数的版本,如果需要兼容无参数访问/verify的场景,可以给参数加可选标记:// 必选token参数版本,token必须存在才能访问 Route::view('verify/{token}', 'auth.verify')->name('verify'); // 可选token参数版本,兼容/verify和/verify/xxx两种访问形式 // Route::view('verify/{token?}', 'auth.verify')->name('verify');配置后在
verify.blade.php中可以通过{{ request()->route('token') }}获取地址栏传递的token值。第二步:修正Ajax跳转的路径逻辑,避免相对路径错误
不要硬写相对路径verify/xxx,建议通过路由名生成地址模板,避免部署路径、页面层级变化导致的跳转错误。
首先在公共模板的script区域提前输出路由模板:<script> window.VERIFY_URL_TPL = "{{ route('verify', ['token' => '__REPLACE_TOKEN__']) }}"; </script>然后修改Ajax的成功回调逻辑:
$.ajax({ url: '{{ url('signupUser') }}', method: 'post', data: formUserSignupData, cache: false, processData: false, contentType: false, success: function(response) { window.location.href = VERIFY_URL_TPL.replace('__REPLACE_TOKEN__', response.auth_success); }, });第三步:清理路由缓存让新规则生效
如果你在生产环境开启了路由缓存,修改路由后需要执行命令清除缓存,新的路由规则才会生效:php artisan route:clear php artisan config:clear可以执行
php artisan route:list查看已注册的路由列表,确认存在verify/{token}对应的GET路由即配置成功。
内容的提问来源于stack exchange,提问作者Mishen Thakshana
相关产品推荐
相关产品推荐

