yan писал(а): ↑2018.07.30, 23:28
Loveorigami писал(а): ↑2018.07.30, 22:04
Похоже, Вы ранее не решали таких задач. Поэтому и приводите ссылку на доку для создания url-правил.
как раз таки много занимался подобными вещами, поэтому знаю о чем пишу, но смысла не вижу дальше дискутировать - не наша тут тема, пусть автор соображает, что ему нужнее
Без кода - это не более, чем просто слова.
Нужнее что? Вашего решения ни я, ни автор не увидели.
Вы изначально ввели всех в заблуждение тем, что слаги в первом уровне "кочуют"
с первым согласен - не учел, отчасти поэтому не делают подобные слаги, что со временем слаг одной страницы может перекочевать под другую, что совсем не хорошо с точки зрения сео
И до сих пор придерживаетесь этого мнения, что так никто не делает, это не правильно.... вот вам ссылка из доки...
Речь шла не о нескольких контроллерах, которые генерируют слаги в первый уровень и обмениваются ими. А об одной сущности, которая поменяла слаг 4 раза
- была страница - site.ru/about-my-company
- через пол года сеошник поменял на site.ru/about-company
- через год компания стала корпорацией - site.ru/about-us
- через месяц сеошник поменял на site.ru/about
Все ЧЕТЫРЕ названия - это названия ОДНОЙ страницы. Никто никуда не мигрирует и не кочует.
ИТОГО -
- зайдя на about-my-company -> 301 -> about
- зайдя на about-company -> 301 -> about
- зайдя на about-us -> 301 -> about
- зайдя на about-123 -> 404
- зайдя на about -> 200
Читая ваши посты я больше думаю над возможностью избавиться от таких заморочек, нежели о конкретной реализации.
А что если запретить изменять слаг через два часа после создания артикла.
Тоже заморочка.
Написать круд для одной таблицы - дело 10 минут. (id, old_url, new_url, status = 301)
Обойдемся без поведения. Вручную, когда нужно сделать редирект, вносите в таблицу запись - откуда и куда.
И в обработчике ошибок - ловите исключение NotFoundHttpException и проверяете.
Все. Не нужно переписывать ни UrlManager, ни писать свои правила, создавать контроллер для редиректов...
Все-таки брак это скорее исключение, нежели правило, чтобы под него выделять отдельную таблицу в БД и писать специальные контроллеры.
В моем варианте - не нужно писать специальные контроллеры. И я рассматриваю не брак - а проиндексированный сайт, в который вложили достаточно много средств на раскрутку, у которого ссылки проставлены в сотнях каталогов, имеют вес и позиции в поисковиках.
А теперь эти ссылки претерпели изменения. Причины бывают разные.