В настоящее время на моем сайте настроено следующее перенаправление: example.com/[0-9]+/[0-9]+ → example.com/tag/$1-$2, где $1 и $2 — значения, полученные из предыдущего регулярного выражения. Я написал простой плагин ниже, и он работает идеально, если ввести example.com/[0-9]+/[0-9]+ в адресную строку. Однако, если я даю ту же ссылку в сообщении внутри Discourse, перенаправление не работает. Есть ли способ этого добиться?
Discourse::Application.routes.append do
get '/:year/:id', to: redirect('/tag/%{year}-%{id}') , constraints: {year: /[0-9]+/, id: /[0-9]+/}
end
Моя первоначальная цель для создания этого маршрута не связана с импортами. Я хотел бы использовать example.com/123/456 (где 123 и 456 — произвольные числа, удовлетворяющие условию [0-9]+) как сокращение для example.com/tag/123-456, чтобы его использование не было семантически «неправильным».
Однако этот маршрут не работает для внутренних ссылок (мне нужно обновить страницу, чтобы он заработал), поэтому мне нужно обнаруживать все ссылки вида example.com/[0-9]+/[0-9]+ и заменять их на example.com/tag/[0-9]+-[0-9]+, что практически невозможно сделать без парсинга каждого нового поста по отдельности.
Извините. Я упустил, что ваша проблема в том, что вам не нравится маршрут для тегов. Почему вы считаете, что изменение этого маршрута будет полезным? Будут ли люди вводить их вручную? Скорее всего, нет, так как Discourse позволяет их искать и вводить.
Не могли бы вы отойти от деталей и объяснить, какую проблему вы решаете, убирая «tag» из маршрута тегов?
Мой сайт устанавливает взаимно однозначное соответствие между научными статьями на сервере препринтов и тегами. Мои пользователи привыкли посещать сайт по адресу preprint.com/123/456 для статьи с идентификатором 123-456. Это соответствует адресу mywebsite.com, поэтому у меня настроен маршрут, который перенаправляет mywebsite.com на mywebsite.com.
Идея в том, что пользователи могут заменить в ссылке preprint.com на mywebsite.com и оказаться на странице именно той статьи, которую они просматривали на сервере препринтов. Всё работало отлично, пока кто-то не опубликовал внутреннюю ссылку mywebsite.com в сообщении, и мы обнаружили, что перенаправление не срабатывает, а вместо этого возвращается ошибка 404. Я использую Discourse для очень специфической и узкой аудитории, поэтому мой случай может показаться странным.
Ага. Тогда, думаю, вам нужен компонент темы, который будет переписывать такие ссылки при их вводе в сообщение. Я не совсем уверен, как это сделать. Один вариант, который потребует некоторого обучения пользователей, — это использование bbcode для таких ссылок. Но я думаю, что компонент темы мог бы просто перехватывать эти ссылки и переписывать их при сохранении.
Круто! Я думаю, что пользовательский компонент темы может исправить и те, у которых https, но, возможно, вы сможете постараться отучить людей от этого или заставить их использовать формат #123-456