Redirecionando links internos via rotas

Atualmente, tenho o seguinte redirecionamento no meu site: example.com/[0-9]+/[0-9]+example.com/tag/$1-$2 onde $1 e $2 são os valores da regex anterior. Escrevi o plugin simples abaixo e ele funciona perfeitamente se eu digitar example.com/[0-9]+/[0-9]+ na barra de URL. No entanto, se eu fornecer o mesmo link em uma postagem dentro do Discourse, o redirecionamento não funciona. Existe alguma maneira de conseguir isso?


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

Você precisa reescrever os links internos nas postagens brutas (e reassarar).

3 curtidas

Isso só mudaria as postagens atuais até agora, certo? Preciso fazer isso depois de cada nova postagem, então?

Novos links serão escritos pelo Discourse, então eles estarão corretos desde o início.

Ou talvez você vá importar mais posts, caso em que você modificará o script de importação para corrigi-los.

Meu propósito inicial para ter essa rota não está relacionado a importações. Gostaria de usar example.com/123/456 (123 e 456 são arbitrários aqui, desde que ambos sejam [0-9]+) como um atalho para example.com/tag/123-456, então não é semanticamente “errado” usá-lo.

No entanto, a rota não funciona para links internos (preciso atualizar o site para que a rota funcione), daí a necessidade de detectar cada example.com/[0-9]+/[0-9]+ e alterá-lo para example.com/tag/[0-9]+-[0-9]+, o que parece praticamente impossível de fazer sem analisar cada novo post um por um.

Desculpe. Perdi que o seu problema é que você não gosta da rota para tags. Por que você acha que seria valioso mudar essa rota? As pessoas vão digitá-las manualmente? Não vão, porque o Discourse permitirá que elas pesquisem e insiram.

Você pode dar um passo atrás e dizer qual problema você está resolvendo ao tirar “tag” da rota de tag?

Meu site cria uma correspondência um a um entre artigos de pesquisa em um servidor de preprints e tags. Meus usuários estão acostumados a visitar o site preprint.com/123/456 para um artigo com id 123-456. Isso corresponde a mywebsite.com - This website is for sale! - mywebsite Resources and Information., portanto, tenho uma rota que redireciona mywebsite.com - This website is for sale! - mywebsite Resources and Information. para mywebsite.com - This website is for sale! - mywebsite Resources and Information..

A ideia é que os usuários possam substituir preprint.com por mywebsite.com e acessar a página exata do artigo que estavam navegando no servidor de preprints. Isso estava funcionando bem até que alguém postou um link interno mywebsite.com - This website is for sale! - mywebsite Resources and Information. e percebemos que ele não estava redirecionando e, em vez disso, retornava um 404. Estou usando o Discourse para uma base de usuários muito específica e direcionada, portanto, meu caso de uso pode parecer estranho.

Aha. Então acho que você quer um componente de tema que reescreva esses links quando eles forem inseridos em uma postagem. Não tenho certeza de como fazer isso. Uma coisa que exigiria um pouco de treinamento do usuário seria o bbcode para esses links. Mas acho que um componente de tema poderia simplesmente sequestrar esses links e reescrevê-los quando eles fossem processados.

Depois que você mencionou os componentes de tema, consegui realizar parcialmente o que eu procurava usando o seguinte componente: Auto-Linkify Words

Ele suporta regex perfeitamente, então sempre que alguém digita mywebsite.com - This website is for sale! - mywebsite Resources and Information., ele substitui com sucesso o link por mywebsite.com - This website is for sale! - mywebsite Resources and Information..

A única coisa que falta é que não funciona se alguém digitar a URL com o prefixo https://. Ainda assim, é um componente muito bom.

1 curtida

Legal! Acho que um componente de tema personalizado poderia resolver os com https também, mas talvez você possa tentar conscientizar as pessoas sobre isso, ou usar #123-456

1 curtida