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

Мне пришлось озадачиться этим вопросом в тот момент, когда я все же решил перейти с самописной системой архивов на расширение Archivist, а заодно изменить структуру сайта таким образом, чтобы разделить записи в блоге в контейнеры по годам, т. к. хоть за 4 года существования сайта постов было и не огромное количество, но стало заметно неудобно раскрывать ветвь Блог и искать в ней нужный документ.

   Раньше все блогозаписи были дочерними документами контейнера Блог и поэтому имели адреса вида blog/blog-page-alias.html. При создании же дополнительных контейнеров для годов и перемещении в них документов их URL изменился на blog/year/blog-page-alias.html.  В связи с этим все внешние ссылки на мои статьи становились нерабочими,  что, конечно же, весьма печально. Для решения этой проблемы существует  прекрасная вещь — код ответа сервера 301 Moved Permanently, известный в народе как 301-й редирект. Реализовать его можно различными способами, но мне  не хотелось возиться с прописыванием регулярных выражений в .htaccess,  поэтому я решил поискать готовые расширения для MODx Revolution.  И таковое нашлось — Redirector.

Работает довольно просто. После установки через менеджер пакетов в меню Компоненты главного меню появляется пункт Redirector,  при нажатии на который появляется таблица созданных редиректов.  Реализован компонент через плагин, который срабатывает на системное  событие OnPageNotFound и пытается найти запрашиваемый URL в. своей таблице. Если таковой находится-то он возвращает ответ с перенаправлением на новый адрес. Все легко и просто.

Единственный момент, с которым я столкнулся в начале — это формат записи URL. В самом начале я использовал адреса вида /blog/blog-page-alias.html, и они не работали. Потом попробовал писать полные адреса, т. е. http://bounz.net/blog/blog-page-alias.html,  но они тоже не работали. После того, как посмотрел в исходный код  плагина понял, как следовало записывать адреса: без слеша в начале, т. е. просто blog/blog-page-alias.html. После этого все заработало.

Теперь внутреняя структура блога меня полностью устраивает, а старые ссылки прекрасно работают.

Быстрых вам редиректов!