推荐一款在 Laravel 应用中为丢失或不存在页面进行重定向的扩展包

301_redirect

1、前言

如果你将网站迁移到了一个新的域名,所面临的一个棘手的问题是用户通过搜索引擎或外部链接进来的页面不存在,如何将这些用户指向正确的页面?

一种解决办法是使用301永久重定向将用户从老的页面重定向到新的页面,在Laravel中,可以这么定义路由:

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

如果有很多页面的话这种路由很快会充斥你的路由文件,而且如果你使用了动态页面的话则会显得更加笨重。

接下来要登场的就是今天我们要给大家推荐的扩展包 —— Laravel Missing Page Redirector,该扩展包通过添加重定向到配置文件或实现内置Redirector接口的方式让上述过程变得更加简单。

下面让我们来看一下如何设置并使用这个扩展包。

2、安装

我们通过Composer来安装这个扩展包:

composer require spatie/laravel-missing-page-redirector

config/app.php中注册服务提供者:

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

然后在app/Http/Kernel.php中注册中间件Spatie\MissingPageRedirector\RedirectsMissingPages

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

接下来,如果你需要发布配置文件的话,在终端运行如下命令:

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

3、使用

如果你打开配置文件config/laravel-missing-page-redirector.php的话,会发现其代码如下:

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

使用方式如下:

  • 首先,我们可以通过创建自己的自定义redirector实现来替代默认的,该redirector必须实现Spatie\MissingPageRedirector\Redirector\Redirector接口并且有一个可以返回老URL和新URL映射关系数组的getRedirectsFor方法。
  • 第二个选项是为ConfigurationRedirector指定重定向数组,只需要为每个老URL(key)与新URL(value)映射关系添加记录即可。
  • 你可以通过大括号包裹的方式使用路由参数(如'/old-blog/{url}' => '/new-blog/{url}')并使用问号标记让参数可选: '/old-blog/{url?}' => '/new-blog/{url}'
  • 如果你想要重定向老URL到不同域名的新URL可以在新URL之前添加http://或https://域名前缀:'/old-page' => 'https://laravel-news.com

如果你想要做301重定向的话,不妨试试这个扩展包吧,GItHub地址是:https://github.com/spatie/laravel-missing-page-redirector

声明:本文整理翻译自http://laravel-news.com

学院君

学院君 has written 548 articles

资深PHP工程师,Laravel学院院长