Laravel 5: Middleware удаляющий конечный слеш в пути url

test

Задача

Если в конце ссылки присутствует символ "/" делать редирект 301 на страницу без него самого.
Задача типичная, значит решение найти не сложно
Итак, создаем Middleware:
#php artisan make:middleware RedirectTrailingSlash
Middleware created successfully.
Заполняем наш файл (app/Middleware/RedirectTrailingSlash.php) соответствующим кодом:
<?php namespace App\Http\Middleware;

use Closure;
use Illuminate\Support\Facades\Redirect;
use Illuminate\Support\Str;

class RedirectTrailingSlash {

/**
* Handle an incoming request.
*
* @param  \Illuminate\Http\Request  $request
* @param  \Closure  $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if (preg_match('/.+\/$/', $request->getRequestUri()))
{
//в исходном коде использовалась другая функция редиректа, выбивало ошибку
return redirect(rtrim($request->getRequestUri(), '/'), 301);
}
return $next($request);
}
}

Регистрируем наш Middleware в Http/Kernel.php:
'front.trailingslash'=>'App\Http\Middleware\RedirectTrailingSlash',

Используем. Я использовал его в конструкторе базового контроллера, чтобы все наследующие контроллеры его выполняли:
//...
class BaseController extends Controller {

//...
public function __construct()
{
$this->middleware('front.trailingslash');
//...
}
//...
}

Все. Теперь при переходе на ссылку вида /our/url/ нас перешлет на /our/url
Категория: 
Share/Save

Делитесь с друзьями в социальных сетях! Оставляйте комментарии!

Share/Save

Это Вам так же может быть интересно!