Laravel 10中/about-us路由返回404 NOT FOUND的解决方法
Laravel 10 中 /about-us 路由返回404的排查与解决
环境信息
- PHP版本:8.2.4
- Laravel版本:10
问题描述
已在web.php中定义/about-us路由,但访问时始终返回404 NOT FOUND错误。其他路由正常运行,已检查数据库TextWidget表存在key为about-page且active=1的记录,同时清理了路由缓存并重启开发服务器,问题仍未解决。
路由代码:
Route::get('/about-us', [SiteController::class, 'about'])->name('about-us');
SiteController对应方法:
<?php namespace App\Http\Controllers; use App\Models\TextWidget; use Illuminate\Http\Request; use Illuminate\View\View; class SiteController extends Controller { public function about(): View { $widget = TextWidget::query() ->where('key', '=', 'about-page') ->where('active', '=', 1) ->first(); return view('about', compact('widget')); } }
排查与解决步骤
1. 检查路由匹配顺序与覆盖问题
- 查看
web.php中该路由的位置,确保它在**通配符路由(如Route::get('/{slug}', ...))**之前。Laravel路由按定义顺序匹配,若通配符路由在前,会优先拦截/about-us请求。 - 执行命令
php artisan route:list,在输出中确认/about-us路由存在,且对应的控制器、方法、请求方法均正确。
2. 彻底清理路由缓存
开发环境下若之前生成过路由缓存,修改路由后必须清理:
php artisan route:clear
注意:开发环境不建议使用
php artisan route:cache,频繁修改路由时会导致缓存与实际路由不一致;生产环境使用缓存后,需确保所有路由均使用控制器类(不能用闭包路由)。
3. 验证服务器配置(生产环境)
若使用Nginx/Apache,需确保请求正确转发到Laravel入口文件:
- Nginx:配置文件中需包含以下规则:
location / { try_files $uri $uri/ /index.php?$query_string; } - Apache:确认
public/.htaccess文件存在且生效,默认内容如下:<IfModule mod_rewrite.c> <IfModule mod_negotiation.c> Options -MultiViews -Indexes </IfModule> RewriteEngine On # Handle Authorization Header RewriteCond %{HTTP:Authorization} . RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] # Redirect Trailing Slashes If Not A Folder... RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} (.+)/$ RewriteRule ^ %1 [L,R=301] # Send Requests To Front Controller... RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [L] </IfModule>
4. 检查控制器与视图的路径/命名
- 确认
web.php顶部已正确引入控制器:use App\Http\Controllers\SiteController; - 检查
SiteController.php是否在app/Http/Controllers目录下,文件名大小写是否正确(Linux系统区分大小写)。 - 确认视图文件
resources/views/about.blade.php存在,文件名大小写与return view('about', ...)中的名称一致。
5. 排查中间件拦截
- 查看该路由是否绑定了特殊中间件,可临时移除中间件测试请求是否正常。
- 检查全局中间件(
app/Http/Kernel.php中的$middleware数组),是否有逻辑导致请求被拦截或重定向。
6. 确认请求URL格式
确保访问的URL是http://your-domain/about-us,而非带尾部斜杠的http://your-domain/about-us/(虽然Laravel默认会重定向,但服务器配置异常时可能导致404)。
内容的提问来源于stack exchange,提问作者Harinda Vishwantha
相关产品推荐
相关产品推荐

