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

**URL:** https://meta.discourse.org/t/redirecting-old-forum-urls-when-the-path-contains-the-name-of-a-discourse-resource/349268
**Category:** Support
**Tags:** permalinks
**Created:** [2025 年 1 月 27 日午後 10:31 UTC](https://meta.discourse.org/t/redirecting-old-forum-urls-when-the-path-contains-the-name-of-a-discourse-resource/349268 "2025-01-27T22:31:12Z")
**Posts on this page:** 4
**Page:** 1

<div class="post-metadata">

### Author: ![hat\_trick](https://avatars.discourse-cdn.com/v4/letter/h/898d66/32.png) [@hat\_trick](https://meta.discourse.org/u/hat_trick)
#### Post date: [2025 年 1 月 27 日午後 10:31 UTC](https://meta.discourse.org/t/redirecting-old-forum-urls-when-the-path-contains-the-name-of-a-discourse-resource/349268/1 "2025-01-27T22:31:12Z")

</div>

こんにちは。

古いフォーラムの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ルーティングについては十分な知識がありません。あるいは、これは正しい方法ではないのでしょうか？

ありがとうございます。

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [2025 年 1 月 27 日午後 11:01 UTC](https://meta.discourse.org/t/redirecting-old-forum-urls-when-the-path-contains-the-name-of-a-discourse-resource/349268/2 "2025-01-27T23:01:31Z")

</div>

> [@hat\_trick](#):
>
> 古いフォーラムのURLは /posts/t{topic\_id}-{url\_slug} の形式です。

それは **残念** ですね。

> [@hat\_trick](#):
>
> Discourse の Permalink を使用して、古いフォーラムのURLを新しい Discourse のURLにマッピングしました。

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

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

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

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

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

```

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

---

<div class="post-metadata">

### Author: ![hat\_trick](https://avatars.discourse-cdn.com/v4/letter/h/898d66/32.png) [@hat\_trick](https://meta.discourse.org/u/hat_trick)
#### Post date: [2025 年 1 月 28 日午後 7:46 UTC](https://meta.discourse.org/t/redirecting-old-forum-urls-when-the-path-contains-the-name-of-a-discourse-resource/349268/3 "2025-01-28T19:46:22Z")

</div>

> [@pfaffman](#):
>
> それは **残念** ですね。

😆

> [@pfaffman](#):
>
> 説明したようなパーマリンクを追加するために、Railsで実行できるRubyスクリプトを作成できます。

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

> [@pfaffman](#):
>
> コンテナ内でそれらの変更を手動で行い、その後、変更を`app.yml`に追加するように後方へ作業を進めることでテストすることをお勧めします。

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

---

<div class="post-metadata">

### Author: ![hat\_trick](https://avatars.discourse-cdn.com/v4/letter/h/898d66/32.png) [@hat\_trick](https://meta.discourse.org/u/hat_trick)
#### Post date: [2025 年 1 月 28 日午後 9:12 UTC](https://meta.discourse.org/t/redirecting-old-forum-urls-when-the-path-contains-the-name-of-a-discourse-resource/349268/4 "2025-01-28T21:12:17Z")

</div>

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

> [@hat\_trick](#):
>
> URLが `/posts/t{topic_id}-{url_slug}` の形式の場合、PostsController によるリクエスト処理をスキップするように `config/routes.rb` にカスタムルートを追加します。

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