Reindirizzare i collegamenti interni tramite route

Attualmente ho il seguente reindirizzamento sul mio sito web: example.com/[0-9]+/[0-9]+example.com/tag/$1-$2 dove $1 e $2 sono i valori dell’espressione regolare precedente. Ho scritto questo semplice plugin qui sotto e funziona perfettamente se digito example.com/[0-9]+/[0-9]+ nella barra degli URL. Tuttavia, se fornisco lo stesso link in un post all’interno di Discourse, il reindirizzamento non funziona. C’è un modo per raggiungere questo obiettivo?


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

Devi riscrivere i collegamenti interni nei post grezzi (e rifare il bake).

3 Mi Piace

Questo cambierebbe solo i post correnti finora, giusto? Devo farlo dopo ogni nuovo post, allora?

I nuovi link saranno scritti da Discourse in modo che siano corretti fin dall’inizio.

O forse importerai altri post, nel qual caso modificherai lo script di importazione per correggerli.

Il mio scopo iniziale per avere quel percorso non è correlato alle importazioni. Vorrei utilizzare example.com/123/456 (123 e 456 sono arbitrari qui purché siano entrambi [0-9]+) come scorciatoia per example.com/tag/123-456, quindi non è semanticamente “sbagliato” usarlo.

Tuttavia, il percorso non funziona per i collegamenti interni (devo aggiornare il sito web per far funzionare il percorso), quindi devo rilevare ogni example.com/[0-9]+/[0-9]+ e cambiarlo in example.com/tag/[0-9]+-[0-9]+, il che sembra praticamente impossibile da fare senza analizzare ogni nuovo post uno per uno.

Mi dispiace. Non avevo capito che il tuo problema fosse che non ti piace il percorso per i tag. Perché pensi che cambierà quel percorso sarà prezioso? Le persone li digiteranno a mano? Non lo faranno, perché discourse permetterà loro di cercarli e inserirli.

Puoi fare un passo indietro e dire quale problema stai risolvendo rimuovendo “tag” dal percorso dei tag?

Il mio sito web crea una corrispondenza uno a uno tra gli articoli di ricerca su un server di preprint e i tag. I miei utenti sono abituati a visitare il sito preprint.com/123/456 per un articolo con id 123-456. Questo corrisponde a mywebsite.com - This website is for sale! - mywebsite Resources and Information., quindi ho una route che reindirizza mywebsite.com - This website is for sale! - mywebsite Resources and Information. a mywebsite.com - This website is for sale! - mywebsite Resources and Information..

L’idea è che gli utenti possano sostituire “al volo” preprint.com con mywebsite.com e atterrare sulla pagina esatta dell’articolo che stavano sfogliando sul server di preprint. Questo funzionava bene finché qualcuno non ha inserito un link interno mywebsite.com - This website is for sale! - mywebsite Resources and Information. in un post e ci siamo resi conto che non reindirizzava e invece dava un 404. Sto usando Discourse per una base di utenti molto specifica e mirata, quindi il mio caso d’uso potrebbe sembrare strano.

Aha. Allora penso che tu voglia un componente del tema che riscriva quei link quando vengono inseriti in un post. Non sono abbastanza sicuro di come farlo. Uno, che richiederebbe un po’ di formazione per l’utente, sarebbe il bbcode per quei link. Ma penso che un componente del tema possa semplicemente intercettare quei link e riscriverli quando vengono “baked”.

Dopo aver menzionato i componenti del tema, sono riuscito a realizzare parzialmente ciò che stavo cercando utilizzando il seguente componente: Auto-Linkify Words

Supporta perfettamente le regex, quindi ogni volta che qualcuno digita mywebsite.com - This website is for sale! - mywebsite Resources and Information., sostituisce con successo il link con mywebsite.com - This website is for sale! - mywebsite Resources and Information..

L’unica cosa che rimane è che non funziona se qualcuno digita l’URL con il prefisso https://. È comunque un componente molto bello.

1 Mi Piace

Bello! Penso che un componente a tema personalizzato potrebbe risolvere anche quelli con https, ma forse puoi provare a dissuadere le persone da ciò, o a usare #123-456

1 Mi Piace