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
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?
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
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.
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.