Redirect missing pages in your Laravel application
PHP
Latest commit 0f53990 Jan 19, 2017 @freekmurze freekmurze committed on GitHub Apply fixes from StyleCI (#12)

README.md

Redirect missing pages in your Laravel application

Latest Version on Packagist Software License Build Status SensioLabsInsight Quality Score StyleCI Total Downloads

When transitioning from a old site to a new one your URLs may change. If your old site was popular you probably want to retain your SEO worth. One way of doing this is by providing permanent redirects from your old URLs to your new URLs. This package makes that process very easy.

When installed you only need to add your redirects to the config file. Want to use the database as your source of redirects? No problem!

Spatie is a webdesign agency based in Antwerp, Belgium. You'll find an overview of all our open source projects on our website.

Postcardware

You're free to use this package (it's MIT-licensed), but if it makes it to your production environment you are required to send us a postcard from your hometown, mentioning which of our package(s) you are using.

Our address is: Spatie, Samberstraat 69D, 2060 Antwerp, Belgium.

The best postcards will get published on the open source page on our website.

Installation

You can install the package via composer:

composer require spatie/laravel-missing-page-redirector

Here's how to install the service provider:

// config/app.php
'providers' => [
    ...
    Spatie\MissingPageRedirector\MissingPageRedirectorServiceProvider::class,
];

Next you must register the Spatie\MissingPageRedirector\RedirectsMissingPages-middleware:

//app/Http/Kernel.php

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

Finally you must publish the config file:

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

This is the contents of the published config file:

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}',
    ],
];

Usage

Creating a redirect is easy. You just have to add an entry to the redirects key in the config file.

'redirects' => [
   '/non-existing-page' => '/existing-page',
],

You may use route parameters like you're used to when using Laravel's routes:

    'redirects' => [
       '/old-blog/{url}' => '/new-blog/{url}',
    ],

Optional parameters are also... an option:

    'redirects' => [
       '/old-blog/{url?}' => '/new-blog/{url}',
    ],

It is also possible to optionally specify which http response code is used when performing the redirect. By default the 301 Moved Permanently response code is set. You may override this using the following syntax:

    'redirects' => [
       'old-page' => ['/new-page', 302],
    ],

Creating your own redirector

By default this package will use the Spatie\MissingPageRedirector\Redirector\ConfigurationRedirector which will get its redirects from the config file. If you want to use another source for your redirects (for example a database) you can create your own redirector.

A valid redirector is any class that implements the Spatie\MissingPageRedirector\Redirector\Redirector-interface. That interface looks like this:

namespace Spatie\MissingPageRedirector\Redirector;

use Symfony\Component\HttpFoundation\Request;

interface Redirector
{
    public function getRedirectsFor(Request $request): array;
}

The getRedirectsFor method should return an array in which the keys are the old URLs and the values the new URLs.

Changelog

Please see CHANGELOG for more information what has changed recently.

Testing

$ composer test

Contributing

Please see CONTRIBUTING for details.

Security

If you discover any security related issues, please email freek@spatie.be instead of using the issue tracker.

Credits

About Spatie

Spatie is a webdesign agency based in Antwerp, Belgium. You'll find an overview of all our open source projects on our website.

License

The MIT License (MIT). Please see License File for more information.