Alte Foren-URLs mit permalinks auf neue Discourse-URLs umleiten
Wenn Sie mit einem unserer Import-Skripte von anderer Forensoftware auf Discourse umgestiegen sind, möchten Sie wahrscheinlich, dass alle Ihre hart erarbeiteten Google-Suchergebnisse weiterhin auf denselben Inhalt verweisen. Discourse verfügt über eine integrierte Methode, um dies für Sie zu behandeln, als Alternative zum Schreiben von nginx-Regeln, mithilfe der Permalink-Nachschlagetabelle (permalinks lookup table).
Die Permalink-Tabelle ermöglicht es Ihnen, zwei Dinge festzulegen: eine abzugleichende URL und wohin diese URL umleiten soll. Es gibt einige Optionen für die Definition des Weiterleitungsziels. Legen Sie eine dieser Optionen fest:
topic_id: um ein Thema anzuzeigen
post_id: um einen bestimmten Beitrag innerhalb eines Themas anzuzeigen
category_id: um eine Kategorie anzuzeigen
tag_id: um ein Tag anzuzeigen
user_id: um ein Benutzerprofil anzuzeigen
external_url: um zu einer URL umzuleiten, die möglicherweise nicht zu Ihrer Discourse-Instanz gehört
Wenn beispielsweise Ihre ursprünglichen Foren-Themen-URLs wie http://example.com/discussion/12345 aussahen und die URL für dieses Thema nach dem Import http://example.com/t/we-moved/987 lautet, können Sie die Zuordnung wie folgt einrichten:
cd /var/discourse
./launcher enter app
rails c
Permalink.create(url: '/discussion/12345', topic_id: 987)
Discourse führt dann eine Weiterleitung mit HTTP-Antwortcode 301 (dauerhaft verschoben) zur korrekten URL für die Themen-ID 12345 durch. Der 301-Code sollte Suchmaschinen dazu veranlassen, ihre Aufzeichnungen zu aktualisieren und mit der Verwendung der neuen URLs zu beginnen.
Wenn Sie möchten, dass einige URLs von Discourse wegleiten, können Sie dies tun, indem Sie external_url festlegen:
Wichtiges Verhalten für externe Permalinks bei Themen-URLs
Wenn ein external_url-Permalink für eine Discourse-Themen-URL (z. B. /t/some-slug/123) erstellt wird, um auf eine externe Website umzuleiten, beachten Sie Folgendes:
das ursprüngliche Thema sollte soft-gelöscht (nicht hart gelöscht) sein
das Thema sollte zu einer öffentlichen Kategorie gehören
Grund: Wenn das Thema noch aktiv ist, wird es von Discourse normal aufgelöst und die Permalink-Suche wird nicht verwendet. Wenn sich das Thema in einer privaten Kategorie befindet, können Berechtigungsprüfungen 404 zurückgeben, bevor die externe Permalink-Weiterleitung angewendet wird.
Dies ist besonders relevant für die In-App-Navigation (angemeldete Benutzer), bei der Routen möglicherweise als JSON/XHR angefordert werden.
Zusätzliche Informationen
Um die ID einer Unterkategorie zu finden, können Sie diese anhand des Slugs wie folgt nachschlagen:
Category.find_by_slug('products').id
Um den Permalink für diese URL zu löschen, gehen Sie wie folgt vor:
Permalink.find_by_url("/blah").destroy
Es kann nur einen Permalink-Eintrag pro URL geben, suchen Sie also einfach nach URL.
Erstellen einer Themenzuordnung von MyBB zu Discourse
Fragen zur Weiterleitung von Discourse zu WordPress
Permalink-Normalisierung
Zuletzt überprüft von @SaraDev am 2022-06-03T20:00:00Z