Migrate a phpBB3 forum to Discourse

SiteSettings.permalink_redirects を参照してください。

編集:おっと。パーマリンクの正規化

/admin/site_settings/category/all_resultspermalink_redirects を検索するということですか? その設定は私には存在しません。

しかし、/^forum\\/(view.*)/\\1 を使用すると、permalink_normalizations がある程度機能します。

  • すべての phpBB リンクは view で始まります。例えば viewtopic.phpviewforum.php です。実際、私たちのケースでは移行された URL はこれら 2 つだけのようですので、正規表現を強化するか、完全なパスマッチングのために 2 つに分割することができます。
  • その正規表現(sed 構文)は /forum/view で始まるすべての URL を取得し、/forum/ の部分を削除します。

これで、ウェブサーバー(または私たちの場合は Cloudflare)で /phpbb/ (私たちの古いフォーラムパス)を /forum/ にリダイレクトするだけで、残りは Discourse が処理します。3 年前にこれを見つけていれば、すべてのバックリンクを壊す代わりに済んだのに。:smiling_face_with_tear:

しかし、この permalink_redirects がどこにあるべきか教えていただけますか? プラグインが必要なのか、あるいは phpBB インポートプラグインの一部だったのかなど。

追記:うまく機能しました。

root@micha:~# curl -IL https://dietpi.com/phpbb/viewtopic.php?p=46083
HTTP/2 301
location: /forum/viewtopic.php?p=46083

HTTP/2 301
location: https://dietpi.com/forum/t/is-there-a-simple-launch-page-for-dietpi/11237/1
x-discourse-route: permalinks/show

HTTP/2 200
x-discourse-route: topics/show

最初の /phpbb => /forum のリダイレクトは、私たちのオリジンへの些細な負荷を避けるために、Cloudflare でリダイレクトルールを介して行われます。実際のトピックへの 2 番目のリダイレクトは、phpBB インポートプラグインによって追加されたパーマリンクに一致させるために、パーマリンク正規化を介して先頭の forum/ を削除して Discourse で行われます。このパーマリンクには、古いフォーラムサブディレクトリパスも新しいフォーラムサブディレクトリパスも含まれていません。

すみません。それが私が言いたかったことです。

いいえ。そのパスの正規化を行うだけで十分です。

これは機能しません。Discourseは/forumで動作し、/phpbbへのリクエストを認識しないためです。Discourseがサブパスにあり、インポート対象の以前のフォーラムソフトウェアのパスと一致しない場合、正規化を有効にするためにはリダイレクト(またはプロキシ前の書き換え)を行う以外に方法はありません。

「いいね!」 1

そうです。それを見落としていました。/phpbb/forumにリダイレクトする必要があり、おそらく正規化も引き続き調整する必要があります。

なるほど、それは確かにそれほど難しくありませんでした。/^forum\\/(view.*)/\\1 は、古い phpBB のパーマリンクに完全に適合します。インポートプラグインによって viewforum.php および viewtopic.php 以外のパーマリンク(たとえば、ユーザープロファイルリンクなど)が生成される可能性があるかどうかは、設定に依存するため不明です。

実際には、パーマリンクをスクロール/参照または並べ替えする方法があると便利で、どの URL スキームが含まれているかをよりよく把握できます。しかし、それは本題から外れており、検索パターンをループした後では、私たちのケースでは上記の 2 つだけが存在すると確信しています。

スクリプトはカテゴリ、トピック、投稿のパーマリンクのみを処理しているようです。

ユーザーのパーマリンクと、古いシステムにユーザーの import_id が含まれるユーザープロファイルを作成したい場合は、コンソールで少量のRubyコードで作成できます。

「いいね!」 1

承知しました。トピックと投稿のURLは同じPHPスクリプトを使用しています。そのため、意図しない正規化を回避するために、正規表現を2つに分割できます。

  1. カテゴリの場合: /^forum\\/(viewforum.php\\?.*)/\\1
  2. トピックと投稿の場合: /^forum\\/(viewtopic.php\\?.*)/\\1

または /^forum\\/(view(forum|topic).php\\?.*)/\\1 ですが、パフォーマンス上のわずかな違いがあるかどうかはわかりません。

いずれにしても、プロファイルURLにバックリンクがある可能性は低いです。バグを報告したユーザーや、提案がプロジェクトに採用されたユーザーにリリースノートでクレジットを与えるために使用しています。しかし、それはまれなケースだと思います。また、Discourseに切り替えたときにリリースノートのリンクはすぐに更新されました。

「いいね!」 1