Discourseリソース名がパスに含まれる場合の、古いフォーラムURLのリダイレクトについて

こんにちは。

古いフォーラムのURLは /posts/t{topic_id}-{url_slug} の形式です。

Discourse のパーマリンクを使用して、古いフォーラムのURLを新しいDiscourseのURLにマッピングしました。

問題は、Railsルーターが古いフォーラムURLへのリクエストを、「posts」リソースに関連付けられたルートのいずれかにルーティングしてしまうことです(どのルートかは不明です)。

パーマリンク正規化はルーティングの後で実行されるため、これは解決策になりません。

解決策は、URLが /posts/t{topic_id}-{url_slug} の形式の場合に、PostsController によるリクエスト処理をスキップするように config\routes.rb にカスタムルートを追加することだと思いますが、Railsルーティングについては十分な知識がありません。あるいは、これは正しい方法ではないのでしょうか?

ありがとうございます。

「いいね!」 1

それは残念ですね。

どのようなものですか?追加したパーマリンクは何ですか?

フォーラムはすでに公開されていますか、それともインポートスクリプトを実行できますか?(実際には、Rails で実行できる Ruby スクリプトを作成して、私が説明したようなパーマリンクを追加できます。)

パーマリンクを /oldforum/{topic_id} のようなものにして、nginx に /posts/t URL をキャッチさせて /oldforum/{topic_id} にリマップするように設定を追加することをお勧めします。

(AI によると) pups で replace を実行すると(すぐにアウトレットに追加できるようになりますが、それがいつになるかはわかりません)、discourse.conf の nginx 設定に以下を追加できます。

# server {} ブロック内に配置してください
location ~ ^/posts/t(?<topic_id>\d+)-.*$ {
    # 恒久的なリダイレクト (301)
    return 301 /oldforum/$topic_id;
    
    # または、一時的なリダイレクト (302) の場合は以下を使用します:
    # return 302 /oldforum/$topic_id;
}

コンテナ内でこれらの変更を手動で行ってから、app.yml に変更を追加するように逆算してテストすることをお勧めします。

「いいね!」 2

:laughing:

はい、まさにその通りです。パーマリンクをすべて追加するためにRubyスクリプトを作成しました。

これでうまくいきました!ありがとうございます。

「いいね!」 3

リダイレクトチェーンがサイトのSEOスコアに影響を与える可能性があるため、このソリューションは却下される可能性があることがわかりました。実際の投稿に到達するには、301リダイレクトが2回とリクエストが3回必要です。

そして、パーマリンクがリクエストを処理するようにします。これは機能するはずのように思えますが、確信が持てません。

「いいね!」 1