Interne Links über Routen umleiten

Ich habe derzeit die folgende Weiterleitung auf meiner Website: example.com/[0-9]+/[0-9]+example.com/tag/$1-$2, wobei $1 und $2 die Werte aus dem vorherigen Regex sind. Ich habe das folgende einfache Plugin geschrieben und es funktioniert perfekt, wenn ich example.com/[0-9]+/[0-9]+ in die URL-Leiste eingebe. Wenn ich jedoch denselben Link in einem Beitrag innerhalb von Discourse angebe, funktioniert die Weiterleitung nicht. Gibt es eine Möglichkeit, dies zu erreichen?


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

Sie müssen die internen Links in den Rohbeiträgen umschreiben (und erneut backen).

3 „Gefällt mir“

Das würde doch nur die bisherigen Beiträge ändern, oder? Muss ich das dann nach jedem neuen Beitrag machen?

Neue Links werden von Discourse geschrieben, sodass sie von Anfang an korrekt sind.

Oder vielleicht werden Sie weitere Beiträge importieren, in diesem Fall werden Sie das Importskript ändern, um sie zu korrigieren.

Mein ursprünglicher Zweck für diese Route hat nichts mit Importen zu tun. Ich möchte example.com/123/456 (123 und 456 sind hier beliebig, solange sie beide [0-9]+ sind) als Abkürzung für example.com/tag/123-456 verwenden, damit es semantisch nicht „falsch“ ist, sie zu verwenden.

Die Route funktioniert jedoch nicht für interne Links (ich muss die Website aktualisieren, damit die Route funktioniert). Daher muss ich jedes example.com/[0-9]+/[0-9]+ erkennen und es in example.com/tag/[0-9]+-[0-9]+ ändern, was praktisch unmöglich zu tun ist, ohne jeden neuen Beitrag einzeln zu parsen.

Entschuldigung. Ich habe übersehen, dass Ihnen die Route für Tags nicht gefällt. Warum denken Sie, dass es wertvoll wäre, diese Route zu ändern? Werden die Leute sie von Hand eingeben? Das werden sie nicht, weil Discourse ihnen erlaubt, sie zu suchen und einzugeben.

Können Sie einen Schritt zurücktreten und sagen, welches Problem Sie lösen, indem Sie „Tag“ aus der Tag-Route entfernen?

Meine Website erstellt eine Eins-zu-eins-Entsprechung zwischen Forschungsarbeiten auf einem Preprint-Server und Tags. Meine Benutzer sind es gewohnt, die Website preprint.com/123/456 für ein Paper mit der ID 123-456 zu besuchen. Dies entspricht mywebsite.com - This website is for sale! - mywebsite Resources and Information., daher habe ich eine Route, die mywebsite.com - This website is for sale! - mywebsite Resources and Information. zu mywebsite.com - This website is for sale! - mywebsite Resources and Information. umleitet.

Die Idee ist, dass Benutzer preprint.com mit mywebsite.com austauschen können und auf der exakten Paper-Seite landen, die sie auf dem Preprint-Server durchsucht haben. Dies funktionierte gut, bis jemand einen internen Link mywebsite.com - This website is for sale! - mywebsite Resources and Information. in einem Beitrag gab und wir feststellten, dass er nicht weiterleitet und stattdessen eine 404-Fehlermeldung liefert. Ich verwende Discourse für eine sehr spezifische und zielgerichtete Benutzerbasis, daher mag mein Anwendungsfall seltsam klingen.

Aha. Dann denke ich, Sie möchten eine Theme-Komponente, die diese Links umschreibt, wenn sie in einen Beitrag eingegeben werden. Ich bin mir nicht ganz sicher, wie das geht. Erstens würde dies eine gewisse Schulung der Benutzer erfordern, nämlich die Verwendung von BBCode für diese Links. Aber ich denke, eine Theme-Komponente könnte diese Links einfach abfangen und beim „Baking“ umschreiben.

Nachdem Sie die Theme-Komponenten erwähnt hatten, konnte ich das, was ich gesucht habe, teilweise mit der folgenden Komponente erreichen: Auto-Linkify Words

Sie unterstützt Regex perfekt, sodass immer dann, wenn jemand mywebsite.com - This website is for sale! - mywebsite Resources and Information. eingibt, der Link erfolgreich durch mywebsite.com - This website is for sale! - mywebsite Resources and Information. ersetzt wird.

Das Einzige, was noch fehlt, ist, dass es nicht funktioniert, wenn jemand die URL mit dem Präfix https:// eingibt. Es ist aber trotzdem eine sehr schöne Komponente.

1 „Gefällt mir“

Schön! Ich denke, eine benutzerdefinierte Themenkomponente könnte auch die mit https beheben, aber vielleicht können Sie versuchen, die Leute davon abzubringen oder #123-456 zu verwenden.

1 „Gefällt mir“