Laravel Packages

Laravel Missing Page Redirector Package

Published
Laravel Missing Page Redirector Package image

If you moved your site to a new domain, chances are you want the users and search engines to be directed to the correct pages on the new domain. One way to do that is using 301 permanent redirects from old pages locations to the new pages locations. In Laravel you can define this in teh routes file like this:

Route::get('/old-page', function () {
return redirect('/new-page', 301);
});

If you have a lot of these they can quickly fill up your routes file and if you are using dynamic pages it could get unwieldy. Spatie’s new Laravel missing page redirector package aims to make this process easier by adding your redirects to the package config file or by implementing the included Redirector interface. Let’s take a look at how this package can be set up and used.

Installation

First, install Laravel missing page redirector through Composer:

composer require spatie/laravel-missing-page-redirector

Add its Service provider in config/app.php:

'providers' => [
...
Spatie\MissingPageRedirector\MissingPageRedirectorServiceProvider::class,
];

Then register the Spatie\MissingPageRedirector\RedirectsMissingPages middleware in app/Http/Kernel.php:

protected $middleware = [
...
\Spatie\MissingPageRedirector\RedirectsMissingPages::class,
],

Then, you have to publish the config file, run the following command in your terminal:

php artisan vendor:publish --provider="Spatie\MissingPageRedirector\MissingPageRedirectorServiceProvider"

Overview

If you opened config/laravel-missing-page-redirector.php configuration file, you will see the following:

return [
 
/**
* This is the class responsible for providing the URLs which must be redirected.
* The only requirement for the redirector is that it needs to implement the
* `Spatie\MissingPageRedirector\Redirector\Redirector`-interface
*/
'redirector' => \Spatie\MissingPageRedirector\Redirector\ConfigurationRedirector::class,
 
/**
* When using the `ConfigurationRedirector` you can specify the redirects in this array.
* You can use Laravel's route parameters here.
*/
'redirects' => [
// '/non-existing-page' => '/existing-page',
// '/old-blog/{url}' => '/new-blog/{url}',
],
];
  • First, you can change the source for your redirects to another source (for example a database) by creating your own redirector, the new redirector must implement Spatie\MissingPageRedirector\Redirector\Redirector interface and have getRedirectsFor method that returns an array maps the old URLs to the new URLs.
  • The second option is for specifying the redirects array for ConfigurationRedirector, just add an element for each redirect with the old URL as the key and the new URL as the value of the element.
  • You can use route parameters by wrapping them between curly braces like this '/old-blog/{url}' => '/new-blog/{url}' and you can make it optional using question mark like this: '/old-blog/{url?}' => '/new-blog/{url}',.
  • Be aware that if you want to redirect an old URL to a new URL a different domain you must add http:// or https:// before the new URL like this: '/old-page' => 'https://laravel-news.com.

If you want an easy way to do 301 permanent redirects from old URLs to new URLs, give the Laravel missing page redirector a try.

Diaa Fares photo

Laravel Artisan, Web Developer, Tech Geek

Sponsored

masteringlaravel logo
Laravel Code Review

Get expert guidance in a few days with a Laravel code review

Visit Laravel Code Review

The latest

View all →
PayZephyr: One Payment API for Stripe, Paystack, and PayPal image

PayZephyr: One Payment API for Stripe, Paystack, and PayPal

Read article
Bifrost Turns One With AI Builds and New Workflows image

Bifrost Turns One With AI Builds and New Workflows

Read article
Preview Blade Templates in macOS Finder with Quick Blade image

Preview Blade Templates in macOS Finder with Quick Blade

Read article
Artisan Debugging Commands in Laravel Telescope 5.24.0 image

Artisan Debugging Commands in Laravel Telescope 5.24.0

Read article
Queue totalSize() and JobInterrupted Event in Laravel 13.31 image

Queue totalSize() and JobInterrupted Event in Laravel 13.31

Read article
Find Unexpected Test Inputs with Fuzz for Pest image

Find Unexpected Test Inputs with Fuzz for Pest

Read article