既存のフォーラムURLをパーマリンクを使用して新しいDiscourse URLにリダイレクトする
インポートスクリプトのいずれかを使用して、他のフォーラムソフトウェアからDiscourseに移行した場合、これまで蓄積してきたGoogle検索結果が引き続き同じコンテンツを指すようにしたいでしょう。Discourseには、パーマリンクルックアップテーブルを使用してこれを処理するための組み込みの方法があります。
パーマリンクテーブルでは、次の2つの設定が可能です。照合するURLと、そのURLが示す先です。URLがリダイレクトされる場所を定義するには、いくつかのオプションがあります。次のいずれかを設定してください。
- topic_id: トピックを表示する
- post_id: トピック内の特定の投稿を表示する
- category_id: カテゴリを表示する
- tag_id: タグを表示する
- user_id: ユーザープロフィールを表示する
- external_url: Discourseインスタンスに属さない可能性のあるURLにリダイレクトする
たとえば、元のフォーラムのトピックURLが http://example.com/discussion/12345 のようなもので、インポート後のそのトピックのURLが http://example.com/t/we-moved/987 の場合、マッピングは次のように設定できます。
cd /var/discourse
./launcher enter app
rails c
Permalink.create(url: '/discussion/12345', topic_id: 987)
これにより、DiscourseはトピックID 12345の正しいURLに対して、HTTPステータスコード301(恒久的に移動)でリダイレクトを実行します。301により、検索エンジンは記録を更新し、新しいURLを使用し始めるはずです。
一部のURLをDiscourseからリダイレクトしたい場合は、external_urlを設定することで実行できます。
Permalink.create(url: '/discussion/12345', external_url: 'http://archived.example.com/discussion/12345')
トピックURLにおける外部パーマリンクの重要な動作
DiscourseトピックURL(例:/t/some-slug/123)のexternal_urlパーマリンクを作成して外部サイトにリダイレクトする場合、次の点に注意してください。
- 元のトピックはソフト削除されている必要があります(ハード削除ではない)。
- トピックは公開カテゴリに属している必要があります。
理由:トピックがアクティブなままだと、Discourseはそれを通常どおり解決し、パーマリンクルックアップは使用されません。トピックがプライベートカテゴリにある場合、外部パーマリンクのリダイレクトが適用される前に、権限チェックにより404が返される可能性があります。
これは、ルートがJSON/XHRとして要求されるインアプリナビゲーション(ログイン済みユーザー)に特に重要です。
追加情報
サブカテゴリのIDを見つけるには、スラッグで次のように検索できます。
Category.find_by_slug('products').id
そのURLのパーマリンクを削除するには、次のようにします。
Permalink.find_by_url("/blah").destroy
URLごとにパーマリンクレコードは1つしか存在できないため、URLで検索するだけで十分です。
MyBBからDiscourseへのトピックマップの作成
DiscourseからWordPressへのリダイレクトに関する質問
パーマリンクの正規化
最終レビュー:@SaraDev, 2022-06-03T20:00:00Z