Laravel路由问题:含index.php的路由需返回404未找到页面
解决Laravel中含index.php的路由仍可访问的问题
方法一:自定义中间件拦截
- 生成中间件:执行命令
php artisan make:middleware BlockIndexPhp - 打开
app/Http/Middleware/BlockIndexPhp.php,修改handle方法:
public function handle(Request $request, Closure $next) { if (str_starts_with($request->getPathInfo(), '/index.php')) { abort(404); } return $next($request); }
- 注册中间件:
- 全局生效:在
app/Http/Kernel.php的$middleware数组中添加\App\Http\Middleware\BlockIndexPhp::class - 特定路由组生效:将中间件加入
$routeMiddleware数组(比如命名为block.index.php),然后在目标路由组中调用->middleware('block.index.php')
- 全局生效:在
方法二:路由规则直接匹配返回404
在routes/web.php的最顶部添加以下路由(必须放在所有其他路由之前,保证优先匹配):
Route::get('index.php/{any?}', function () { abort(404); })->where('any', '.*');
方法三:服务器配置层面拦截(更高效)
Apache(修改.htaccess)
在项目根目录的.htaccess文件中,现有Rewrite规则前添加:
RewriteCond %{THE_REQUEST} /index\.php [NC] RewriteRule ^ - [R=404,L]
Nginx(修改站点配置)
在server配置块中添加:
if ($request_uri ~* "^/index.php") { return 404; }
修改后重启Nginx服务生效
内容的提问来源于stack exchange,提问作者ayazBAM
相关产品推荐
相关产品推荐

