Главная » Laravel » Как убрать данные дубли в laravel

Как убрать данные дубли в laravel

308 просмотров

В данной заметке будем избавляться от основных дублей страниц - явления, при котором одна и та же страница доступна по нескольким адресам.

По-умолчанию главную страницу можно открыть несколькими способами:
http://yoursite.loc
http://yoursite.loc/public
http://yoursite.loc/public/index.php

а остальные страницы, например «services» так:
http://yoursite.loc/services
http://yoursite.loc/public/services
http://yoursite.loc/public/index.php/services

То есть дубли с public и public/index.php могут встраиваться в URL любой страницы сайта.

404.jpgЧто бы убрать данные дубли, добавляем в файл app/Providers/RouteServiceProvider.php в метод boot():

public function boot()
{
    /*
     * Убираем дубли страниц, сервер выдаст ошибку 404 или Not Found
     * Проверка URL на содержание /public/ или /public/index.php
     */
    if (preg_match("/^\/public/", \Request::getBaseUrl()) ) { 
        abort(404);
    }

    parent::boot();
}

В результате сервер вернет ошибку 404 (Not Found), такую же как если пользователь перейдет по любой несуществующей ссылке.

Ошибка 301
Как вариант, можно вместо этого сделать перенаправление на запрашиваемую страницу но уже с нормальным URI:

if (preg_match("/^\/(public)|(public\/index.php)/",\Request::getBaseUrl()) ) {
    
    $newUrl = str_replace(\Request::getBaseUrl(), '', \Request::getUri());
    header('Location: '.$newUrl, true, 301);
    exit();

}

Так же, данный код, вместо класса сервис-провайдера можно поместить в методе __construct() основного контролера (от которого наследуют дочерние).

 

Источник: https://klisl.com/laravel_duplicate_pages.html 

Читайте также:

Функции выбора данных из базы данных

public function getItems ($arrWhere = []) { $builder = $this->model; // Select fields if (isset($arrWhere) && $arrWhere != '') { $builder = $builder->select($arrWhere); } else { $builder = ...

Работа фильтра laravel

Структура js В глобальную переменную записываем данные урл var globalParams = generateUrlArray(); Из строки поисковой мы берем все параметры и сохраняем в массив var url = ...

Модели и репозитории

В моделях мы определяем статические переменные и делаем связи   protected $table = 'users'; protected $primaryKey = 'userID'; protected $guarded = ; $this->belongsToMany - один ко многим ...
Показать еще