Redirección de enlaces internos a través de rutas

Actualmente tengo la siguiente redirección en mi sitio web: example.com/[0-9]+/[0-9]+example.com/tag/$1-$2 donde $1 y $2 son los valores de la regex anterior. Escribí este simple plugin a continuación y funciona perfectamente si escribo example.com/[0-9]+/[0-9]+ en la barra de url. Sin embargo, si proporciono el mismo enlace en una publicación dentro de discourse, la redirección no funciona. ¿Hay alguna manera de lograr esto?


Discourse::Application.routes.append do
    get '/:year/:id', to: redirect('/tag/%{year}-%{id}') , constraints: {year: /[0-9]+/, id: /[0-9]+/}
end

Necesitas reescribir los enlaces internos en las publicaciones sin procesar (y volver a hornear).

3 Me gusta

¿Esto solo cambiaría las publicaciones actuales hasta ahora? ¿Necesito hacerlo después de cada nueva publicación entonces?

Los nuevos enlaces serán escritos por Discourse, por lo que serán correctos desde el principio.

O tal vez vayas a importar más publicaciones, en cuyo caso modificarás el script de importación para corregirlos.

Mi propósito inicial para tener esa ruta no está relacionado con las importaciones. Me gustaría usar example.com/123/456 (123 y 456 son arbitrarios aquí, siempre que ambos sean [0-9]+) como un atajo para example.com/tag/123-456, por lo que no es semánticamente “incorrecto” usarlo.

Sin embargo, la ruta no funciona para enlaces internos (necesito actualizar el sitio web para que la ruta funcione), por lo tanto, necesito detectar cada example.com/[0-9]+/[0-9]+ y cambiarlo a example.com/tag/[0-9]+-[0-9]+, lo que parece prácticamente imposible de hacer sin analizar cada nueva publicación una por una.

Lo siento. Me perdí que tu problema es que no te gusta la ruta para las etiquetas. ¿Por qué crees que sería valioso cambiar esa ruta? ¿La gente las va a escribir a mano? No lo harán, porque Discourse les permitirá buscarlas e introducirlas.

¿Puedes dar un paso atrás y decir qué problema estás resolviendo al quitar “etiqueta” de la ruta de etiquetas?

Mi sitio web crea una correspondencia uno a uno entre los artículos de investigación en un servidor de preprints y las etiquetas. Mis usuarios están acostumbrados a visitar el sitio web preprint.com/123/456. Para un artículo con id 123-456. Esto corresponde a mywebsite.com - This website is for sale! - mywebsite Resources and Information., por lo tanto, tengo una ruta que redirige mywebsite.com - This website is for sale! - mywebsite Resources and Information. a mywebsite.com - This website is for sale! - mywebsite Resources and Information..

La idea es que los usuarios puedan reemplazar “al vuelo” preprint.com con mywebsite.com y aterrizar en la página exacta del artículo que estaban navegando en el servidor de preprints. Esto funcionaba bien hasta que alguien puso un enlace interno mywebsite.com - This website is for sale! - mywebsite Resources and Information. en una publicación y nos dimos cuenta de que no se estaba redirigiendo y, en cambio, daba un 404. Estoy usando Discourse para una base de usuarios muy específica y dirigida, por lo tanto, mi caso de uso puede sonar extraño.

Ajá. Entonces creo que quieres un componente temático que reescriba esos enlaces cuando se ingresan en una publicación. No estoy muy seguro de cómo hacer eso. Una cosa, que requeriría un poco de entrenamiento para el usuario, sería el bbcode para esos enlaces. Pero creo que un componente temático podría simplemente secuestrar esos enlaces y reescribirlos cuando se hornean.

Después de que mencionaste los componentes de temas, pude lograr parcialmente lo que buscaba usando el siguiente componente: Auto-Linkify Words

Soporta perfectamente expresiones regulares, así que cada vez que alguien escribe mywebsite.com - This website is for sale! - mywebsite Resources and Information., reemplaza exitosamente el enlace con mywebsite.com - This website is for sale! - mywebsite Resources and Information..

Lo único que falta es que no funciona si alguien escribe la URL con el prefijo https://. Aún así, es un componente muy bueno.

1 me gusta

¡Genial! Creo que un componente de tema personalizado podría solucionar también los que usan https, pero quizás puedas intentar enseñar a la gente a no usarlos, o a usar #123-456.

1 me gusta