古いサイトをそのまま残し、古いリンクをdiscourse内で機能させるにはどうすればいいですか?

提案にあったように、同じドメインでDiscourseを使用しながら、古いフォーラムを「そのまま」にしておこうとしています。nginxでプロキシを設定し、DiscourseのURLとの競合を回避できたため、最初のページ読み込み時(およびSEO目的)にはすべて正常に機能しています。

問題は、Discourse内の古いリンクへのリンクです。DiscourseのアプリルーティングがそれらのURLを内部リンクとしてインターセプトするため、404になります。手持ちのツールでこれを回避しようと数多くの方法を試しましたが、URLや同一ドメインでは何も機能しません。(Discourseをサブフォルダに入れたくもありません)

nginxで行っていることを模倣するために、SERVER_SIDE_ONLY配列に何かを追加できれば、うまくいくはずです。これを実現する方法、または他の方法について何か提案はありますか?

それは、そのトピックが推奨していたこととは全く違います。新しいフォーラムは新しいサブドメインで開始し、古いものはそのままにしておくべきです。

それは正しいと思います。もし古いフォーラムと新しいフォーラムを同じドメインに置きたいのであれば(繰り返しますが、すでに概説した問題に対してはひどいアイデアのように思えます)、古いものへのCNAMEである別のドメインを用意し、Discourseがそれらにリンクするようにすれば、Discourseは別のサーバーであると認識し、それらのリンク自体を処理しようとしないでしょう。そして、nginxがリンクを受け取ったとき、それは単に別のドメインからデータをServingするか、ブラウザを正しいものにリダイレクトするかのどちらかをするでしょう。

古いものをarchiveサブドメインに配置すること(SEOへの影響のリスクを冒して)も検討しましたが、それでも、ユーザーが提供するリンクを変更する方法は、考えられるすべてのページにパーマリンクを作成すること以外にないと思います。archiveサブドメインの使用は、人々がそれについて知り、ブラウザのアドレスバーからコピー&ペーストするにつれて、最終的には引き継がれると推測します。

インポートを実行したばかりであれば、それらすべてにパーマリンクが設定されますが、それはあまり役に立ちません。そして、インポートを行うことでかなりの収入を得ている人が考えるようなことです。

最も簡単なのは、新しいフォーラムを新しいURLに移動すること(まだSEOをそれほど損なっていないことを願います)か、古いフォーラムを別の場所に移動すること(古いコンテンツのSEOは失われますが、パーマリンク正規化やNGINXの魔法でリダイレクトできる可能性があります)です。新しいサイトはどのくらい前から存在していますか?

パーマリンク正規化を作成できるかもしれません。 。 。いいえ。パーマリンク正規化はパーマリンクにのみ機能し、外部では機能しないと思います。テーマコンポーネントを使用して一致するURLを見つけ、それらを偽の/ cnameホスト名で書き直すことは可能かもしれませんが、ベイクされた投稿に何が渡されるかはわかりません(ホスト名を含む完全なURLなのか、それともクッキングプロセスでホスト名が削除されるのか?)。

ベイクされた投稿に完全なURLが含まれている場合、https://github.com/literatecomputing/runners-onebox-themeで行っているようなことを行うことができます。

「いいね!」 1

:bulb:! これをテーマHTMLのスクリプトで404ページで処理できます…

404ページがブラウザウィンドウを「見つからない」URLにリロードするようにしました。これによりサーバーサイドがヒットします。機能します!唯一の欠点は、リダイレクトが目立ち、実際の404の場合はアプリから離れてしまうことです(サイドバー/ヘッダーが失われます)。

<script type="text/discourse-plugin" version="0.8">
  api.onPageChange((url, title) => {
    const router = api.container.lookup('service:router');
    var is404 = document.getElementsByClassName("page-not-found");
    if (is404.length) {
        const params = new URLSearchParams(router.currentRoute.queryParams).toString();
        let q = "";
        if (params){ q = "?"+params; }
        window.location.replace(window.location.origin + url + q);
    }
  });
</script>

クライアント側でキャッチできるはずだと思います。以前提案したように。HTML内の古いサイトへのリンクにはホスト名が含まれていますか?

はい、完全なURLがあります。テーマコンポーネントの作成を検討します。ありがとうございます!

「いいね!」 1

テーマコンポーネントが作成されました!指定された正規表現に一致する hostname への href を検索し、内部ルーティングをスキップするために window.location を設定する click イベントを追加します。

「いいね!」 1

このシナリオで (インライン) ワンボクシングが機能するかどうか興味があります。

同じドメインのURLはワンボックス化され、プレーンリンクと同じ問題が発生します。私のテーマコンポーネントは、投稿内の任意の <a> href リンクに適用されるため、ワンボックス化されたリンクにも機能します。

「いいね!」 1

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.