最後のアップデートでカテゴリのパーマリンクが壊れています。トピックのパーマリンクは正常に機能しています。
例えば、category/11562 は c/11562 にリダイレクトされますが、これは正しくありません。正しく設定されているリダイレクト先は c/general/4 または c/4 であるべきです。
どなたかこの問題の解決にご協力いただけますでしょうか?
category/11562 用のパーマリンクを作成しましたが、以前は general にリダイレクトされていたものが、現在は壊れていますか?
どのアップデートブランチからですか?
はい、以前は正常に動作していました。その後、以下に更新しました。
<meta name="generator" content="Discourse 3.3.0.beta1-dev - https://github.com/discourse/discourse version 0bb492c6b6b79389a12b277b9d25b99e75f2625d">
DBを完全にクリーンアップして、他のフォーラムデータをゼロから再インポートしましたが、現在は動作していません。
これが問題だと思います。なぜなら、今朝のテストでは再現できなかったからです。
パーマリンクがデータベースにまだ存在し、正しい場所を指しているかどうか確認してもらえますか?
新しいインポートでパーマリンクを再度追加しました。これはインポートスクリプトによって行われます。しかし、ウェブを使用して手動で追加しようとしました。ウェブのスクリーンショットとDBの結果を添付します。何か見落としているかもしれません。
パーマリンクが /category/11562 ではなく /forum/category/11562 になっています。
推測ですが、途中でパーマリンクの正規化が失われたのではないでしょうか。
https://preview.vaadin.com/forum/category/11562 へのレスポンスを確認しても、理解できません。
https://preview.vaadin.com/forum/c/11562 という Location を持つ 302 を受け取ります。
一方、トピックについては、例えば:
https://preview.vaadin.com/forum/thread/851770
Location: https://preview.vaadin.com/forum/t/tabsheet-tabs-not-displaying-properly-in-ie8-after-upgrade-to-6-7-1/173931 を持つ 301 を受け取ります。
Discourse が両方を等しく処理することを期待していますが、ご覧のとおり、どちらも /forum/ セグメントを保持しています。
あなたのフォーラム全体がサブフォルダインストールであるという事実に言及しませんでしたね。
もう少し詳しく調べたのですが、これがどのように機能したのか理解できません。category/ は常に categories#redirect ルートをトリガーし、これは最近変更されていません。
get "category/*path" => "categories#redirect"
編集:以下の投稿は、以前は機能していたことを示しています。
はい。サブフォルダーインストールでパーマリンクとパーマリンク正規化がどのように機能するか、想像もつきません。
そして、それは常にサブフォルダーインストールでしたか?
インポートスクリプトを再実行したときに、他に何も変更されませんでしたか?
スクリプトに何らかの違いがある可能性が最も高いと思われます。
待ってください。https://meta.discourse.org/category/67 は Announcements - Discourse Meta にリダイレクトされます。つまり…いいえ、しかしパーマリンクがその /category リダイレクトをオーバーライドすることを示す仕様があり、それは4〜5年前のものです。
ですから、何が起こっているのかを理解するために、手動でカテゴリリダイレクトを作成すると思います(例:「/category/mycategory」や数字を含まない他のものなど)。
@pfaffman さん、良い発見ですね。そのテストがあれば、実際に機能したはずです。
そんなことが可能だとは知りませんでした!
はい、とても便利です。Serve Discourse from a subfolder (path prefix) instead of a subdomain を参照してください。
回答ありがとうございました!
興味深いことに、カテゴリのパーマリンクは、元のURLに /category/ という名前のパスがない場合にのみサブフォルダーから機能することがわかりました。@pfaffman が回答で言及したように。たとえば、/forum/category_foo/123 は目的の一般カテゴリに正しくリダイレクトされます。
Discourse は /category/ をキャプチャし、/c/ にオーバーライドします。
したがって、これは非常に簡単に解決できます。
古い category/11562 からのredirectである /c/11562 を、カテゴリ General /c/4 に追加します。
そして、おっしゃる通り、最初のインストールはサブフォルダーなしでしたが、2番目はサブフォルダーがあり、これが3番目です。テストしたところ、最初の2回は機能していたと思います。2番目と3番目の間での唯一の変更点は、1番目と2番目の間でDBをクリーンアップしなかったことです。そして3番目は、Dockerの外にある新しいDBでのクリーンインストールでした(Discourse v3へのアップグレードとは別に)。したがって、Discourse v3ベータ版で何かが変更されたのではないかと疑っています。そうでなければ、サブフォルダーがなくても、なぜそれが機能したのでしょうか?
こちらが回答です
もし私の理解が正しければ、Discourseは、ルートにセグメントがある場合にのみ/category/から/c/へのリダイレクトを適用するということですね。
それにもかかわらず、あなたのフォーラムを例にとると:https://meta.discourse.org/で、https://meta.discourse.org/category/1と入力すると、https://meta.discourse.org/c/bug/1にリダイレクトされます。
これは私たちのインストールでも経験していることと同じで、あなたのサイトでも/category/#old_numberから/c/#real_categoryへのリダイレクトは不可能で、常に/c/#old_numberにたどり着くことになります。

