мультисайт, домен пока 1, используется lang prefix /lv /en. Проблема в том что спамеры генерируют backlinks типа на 301 редирект и они забивают все проги аналитики seo.
Дело имхо в роутинге мультисайта.
Думаю если будет ответ чистым 404, проблема исчезнет. Но как подобраться или сделать костыль не приложу ума?
https://talk.octobercms.com/t/understanding-multisite-and-routing/2941
А как по другому учитывая работу префиксов должно работать если проблема только в редиректах?
Ну, на сайте даже нет такой page, где url = "/redirect", поэтому нужно как то сразу 404 отвечать.
А как он должен это понимать, если это мультисайт? Для каждой страницы сканировать все сайты которых может быть множество на отсутствие страницы ? Тогда сайты все будете тормозить )
я думал что пройтись по всем Pages не так и дорого.
На самом деле дорого. Учитывая их множество вариаций)) и учитывая, что если страницы не существует, придется сканировать все сайты
Но если тема одна, а языков много, то в performace разницы нет ? так
Типо если подкинуть такой урл к сайту то он делает 301 редирект?
ну да. На самом деле если подкинуть любой урл без Lang Prefix он сначала делает 301, потом 404.
Не замечал, надо бы глянуть
Так всегда было при Rainlab.Translate, но там можно было это гасить )
В целом, если сайт объединены в группу, то можно их просканировать по группе, а так же группировать по теме. Чтобы если несколько сайтов используют одну тему, повторно не сканировать. Что-то вроде: public function handle(\Illuminate\Http\Request $request, Closure $next) { $pageInSite = Site::listSites() ->isEnabled() ->first(function(SiteDefinition $site) use($request) { $theme = Theme::load($site->theme); $router = new Router(theme); $result = $router->findByUrl($request->url()); unset($theme, $router); return $result; }); return $pageInSite ? $next($request) : app(Controller::class)->run(404); } Если находим страницу - идем дальше в контроллер и работает магия октября. Если не находим, то вызываем логику контроллера 404. Это можно упаковать в middleware, например в NotFoundPageMiddleware и повесить на контроллер через Plugin.php или app/provider.php метод boot. Cms\Classes\CmsController::extend(function($controller) { $controller->middleware(NotFoundPageMiddleware::class); });
Есть продвижение по этому. В целом, Владимир, Вам огромное спасибо, идея супер. У нас на проекте надеюсь что всё получится, так как мы получили больше контроля. Проект там содержит категории на разных языках типа url = /:categoryName - так что теперь в случае захода мы делаем запрос, проверяем на slug, 404 если нет и уже более грамотный 301 куда нужно. Твоя идея тоже сработает, но с некоторыми доработками, я думаю прежде всего нужно всё что с url prefix отправлять сразу на return $next($request); а всё что без - уже кастомно парсить. В нашем случае захадкодим языки что бы быстрее было. Сейчас разбираюсь что делать с Pages и url, но и тут всё более мение нормально, скорее всего можно будет делать 301 на такие вещи как http://domain/about -> /en/about http://domain/o-nas -> /ru/o-nas
Ну вариант был с телефона накидан, так что допускал в нем изъяны )) но в рад что даже это помогло :)
Обсуждают сегодня