Laravel无改动情况下新增路由及原有/admin路由突然404排查求助
你的问题核心是Laravel路由匹配优先级错误,Laravel路由会按照定义顺序从上到下匹配,先命中的规则优先生效。
解决方案
- 调整路由定义顺序
你现在把通配符路由Route::get('/{pageAlias}', ...)定义在了/test路由、/admin路由组、auth路由的前面,所有除了/、/instagram-gallery之外的请求都会优先被这个通配符路由拦截,把路径当成pageAlias参数传入PageController,当PageController中没有对应别名的页面时就会返回404,你误以为是路由未匹配。
正确的路由排列顺序应该把通配符路由放在所有固定路由的最后,调整后的web.php路由部分参考:
// Frontend Route::get('/', [App\Http\Controllers\FrontendController::class, 'home'])->name('home'); Route::get('/instagram-gallery', [App\Http\Controllers\FrontendController::class, 'instagramGallery'])->name('instagram-gallery'); Route::post('/contact-send', [App\Http\Controllers\PageController::class, 'contactSend'])->name('contact-send'); Route::get('/test', [App\Http\Controllers\FrontendController::class, 'home'])->name('test'); // Admin Route::group(['prefix' => 'admin', 'middleware' => ['auth', 'is_admin']], function(){ // 原有admin路由保持不变 }); require __DIR__.'/auth.php'; // 通配符路由放到最后 Route::get('/{pageAlias}', [App\Http\Controllers\PageController::class, 'index'])->name('page');
- 清除缓存确认生效
调整后执行以下命令清除缓存:
php artisan route:clear php artisan cache:clear php artisan config:clear
- 验证匹配逻辑
如果调整后仍有异常,可在PageController的index方法开头添加调试代码:
dd('当前被通配符路由拦截,参数为:'.$pageAlias);
访问/test或/admin如果输出上述内容,就可以确认之前的问题确实是路由顺序错误导致的拦截,删除调试代码即可正常使用。
内容的提问来源于stack exchange,提问作者Zephni
相关产品推荐
相关产品推荐

