phpwatch / laravel-fast404
A Laravel middleware to quickly terminate Page-Not-Found pages that do not require a full HTML page
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-12-21 03:52:44 UTC
README
Laravel Fast 404
Laravel Fast 404 is a Laravel package that adds a global middleware to your Laravel application to immediately terminate HTTP(s) requests for non-HTML 404 requests. This prevents unnecessary database connections and your application from fully bootstrapping to serve an HTML page that nobody will see.
This is done by inspecting every incoming HTTP request's "Accept" header and the URI path. If the URI path ends with a known static file extension (such as .jpg
, .png
, .woff
, etc), and the Accept
header does not mention text/html
(which is the case when browsers request images, web fonts, JS files, CSS files, etc), the request is immediately terminated by this middleware.
Requirements
- Laravel 5.5+, 6, or 7
- PHP 7.4
Installation
composer require phpwatch/laravel-fast404
Upon installation, Laravel will automatically register the Service Provider bundled with this package, which will in turn register middleware and the Fast404Middleware
service automatically.
Configuration
You can configure the message, the regular expression used to match URI patterns (e.g. a list of file extensions), and optionally an exclusion regular expression.
From configuration files
Update your config/app.php
file, and add the following configuration to the existing array:
<?php return [ // ... 'fast404' => [ 'message' => 'Not Found', 'regex' => '', 'exclude_regex' => '', ], ];
All configuration values must be strings.
File type extensions
The default regular expression is:
/\.(?:js|css|jpg|jpeg|gif|png|webp|ico|exe|bin|dmg|woff|woff2)$/i
This creates a non-capturing group of file types separated by the pipe (|
) symbol above.
By updating the service provider (advanced)
This package bundles a Service Provider that conveniently enables middleware. You can turn this feature off if you wish to configure the middleware to your liking.
Step 1: Remove the automatic provider discovery for this library
In your root composer.json
file, add/merge configuration directives:
{ "extra": { "dont-discover": [ "phpwatch/laravel-fast404" ] } }
Step 2: Add the middleware
In your application App/Http/Kernel.php
file, prepend the Middleware provided by this package.
<?php class Kernel extends HttpKernel { // protected $middleware = [ \PHPWatch\LaravelFast404\Fast404Middleware::class, // other middleware ]; // ... }
Make sure to add \PHPWatch\LaravelFast404\Fast404Middleware::class,
to the top because middlewares are run in the order they are declared.
Optional step 3: Register a service provider for further customizations
If you would like to configure the middleware to change the message, file extensions, or the exclusion pattern, you will need to register it in the Service Container.
To do so, you can either create a new service provider, or update an existing one to declare how the \PHPWatch\LaravelFast404\Fast404Middleware
class is instantiated.
// 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'); });
Contributions
Contributions are welcome! Please feel free to send a PR or open an issue. Please note that this Laravel package is in the same line as phpwatch/fast404
and phpwatch/wordpress-fast404
packages, and the extensions list updates will be made to all packages in a framework-agnostic way.