phpwatch / laravel-fast404
Laravel 中间件,用于快速终止不需要完整 HTML 页面的页面不存在(404)错误
Requires
- php: ^7.4
- illuminate/http: ^5.5 || ^6.0 || ^7.0
Requires (Dev)
- phpunit/phpunit: ^9.1
This package is auto-updated.
Last update: 2024-09-21 03:19:51 UTC
README
Laravel Fast 404
Laravel Fast 404 是一个 Laravel 扩展包,它为 Laravel 应用程序添加一个全局中间件,用于立即终止非 HTML 404 请求的 HTTP(s) 请求。这可以防止不必要的数据库连接,并防止应用程序完全启动以服务一个无人会看到的 HTML 页面。
这是通过检查每个传入的 HTTP 请求的 "Accept" 头和 URI 路径来实现的。如果 URI 路径以已知的静态文件扩展名结尾(如 .jpg
,.png
,.woff
等),并且 Accept
头没有提及 text/html
(这是浏览器请求图像、网络字体、JS 文件、CSS 文件等情况),则请求将由该中间件立即终止。
要求
- Laravel 5.5+、6 或 7
- PHP 7.4
安装
composer require phpwatch/laravel-fast404
安装后,Laravel 将自动注册此包捆绑的 Service Provider,进而自动注册中间件和 Fast404Middleware
服务。
配置
您可以根据需要配置消息、用于匹配 URI 模式的正则表达式(例如文件扩展名列表),以及可选的排除正则表达式。
从配置文件中
更新您的 config/app.php
文件,并在现有数组中添加以下配置
<?php return [ // ... 'fast404' => [ 'message' => 'Not Found', 'regex' => '', 'exclude_regex' => '', ], ];
所有配置值 必须是字符串。
文件类型扩展名
默认正则表达式为
/\.(?:js|css|jpg|jpeg|gif|png|webp|ico|exe|bin|dmg|woff|woff2)$/i
这创建了一个由竖线(|
)符号分隔的非捕获文件类型组。
通过更新服务提供者(高级)
此包捆绑了一个 Service Provider,方便地启用中间件。如果您希望根据喜好配置中间件,则可以关闭此功能。
步骤 1:删除此库的自动提供者发现
在您的根 composer.json
文件中,添加/合并配置指令
{ "extra": { "dont-discover": [ "phpwatch/laravel-fast404" ] } }
步骤 2:添加中间件
在您的应用程序 App/Http/Kernel.php
文件中,将此包提供的中间件添加到前面。
<?php class Kernel extends HttpKernel { // protected $middleware = [ \PHPWatch\LaravelFast404\Fast404Middleware::class, // other middleware ]; // ... }
请确保将 \PHPWatch\LaravelFast404\Fast404Middleware::class,
添加到顶部,因为中间件的执行顺序是它们声明的顺序。
可选步骤 3:注册服务提供者进行进一步自定义
如果您想配置中间件更改消息、文件扩展名或排除模式,您需要在服务容器中注册它。
为此,您可以创建一个新的服务提供者,或者更新现有的一个以声明如何实例化 \PHPWatch\LaravelFast404\Fast404Middleware
类。
// at the top use PHPWatch\LaravelFast404\Fast404Middleware; // in register() method: $this->app->bind(Fast404Middleware::class, static function ($app): Fast404Middleware { return new Fast404Middleware('Not Found', '/\.(?:js|css|jpg|jpeg|gif|png|webp|ico|exe|bin|dmg|woff|woff2)$/i'); });
贡献
欢迎贡献!请随时发送 PR 或打开问题。请注意,此 Laravel 扩展包与 phpwatch/fast404
和 phpwatch/wordpress-fast404
扩展包处于同一系列,并且扩展名列表更新将以框架无关的方式应用于所有扩展包。