任意のホームページを許可(Jay Pfaffman による)

さて、@hellekin はこれが専用のトピックに値すると思ったようです。まだその段階ではないかもしれませんが、ここにご紹介します。来週初めに内容をチェックし、実際に他の人々も使えるようなものになるよう努めます。:wink:

彼が言った通りです:

「いいね!」 17

@pfaffman 以下の設定を試してみました:

  1. 貴方のテーマコンポーネントをインストール
  2. home_url_overridehttps://thx.zoethical.org/TransHack_·Xist·nce… に設定
  3. HTML ファイルに一致する Nginx 設定を追加:
        location = /TransHack_·Xist·nce… {
                default_type text/html;
                alias /srv/www/zoethical.org/thx/home.html;
        }

ファイルを直接呼び出すことはできますが、https://thx.zoethical.org を呼び出すと失敗します。パーマリンクのチェックに気づいたため、/ のパーマリンクを追加しようとしましたが、これも機能しませんでした。これはキャッシュの問題かもしれませんか?

参考までに、home.html ファイルの内容は以下の通りです:

<!DOCTYPE html>
<html>
        <head>
                <meta charset="UTF-8">
                <title> TransHack ·Xist·nce… </title>
                <link rel="stylesheet" href="/thx.css">
        </head>
        <body class="thx home">
                <header>
                        <h1>THX</h1>
                </header>
                <section id="agora">
                        <h2><a href="https://thx.zoethical.org/c/agora/1">Agora</a></h2>
                        <d-topics-list discourse-url="https://thx.zoethical.org" per-page="5" category="1"></d-topics-list>
                </section>
                <section id="fonderie-de-fiction">
                        <h2><a href="https://thx.zoethical.org/c/fonderie-de-fiction/7">Fonderie de fiction</a></h2>
                        <d-topics-list discourse-url="https://thx.zoethical.org" per-page="5" category="7"></d-topics-list>
                </section>
                <script src="https://thx.zoethical.org/javascripts/embed-topics.js"></script>
        </body>
</html>

編集: インスタンスがログイン(SSO)を必要としていることが原因ではないかと推測します。その場合、このケースでは機能不全が起きる可能性があります。インスタンスをもう少し公開する形で、さらにテストを行う用意はあります。サイトを公開した後も、ホームページにアクセスすると「Oops! That page doesn’t exist or is private.」というメッセージが表示されたままです。なぜでしょうか?

「いいね!」 3

Discourse サイトで設定しているのはホームページですか?おそらく、/ で始まる URL だけを指定したいのだと思います。

「いいね!」 2

ああ、つまりファイルはデフォルト、通常は index.html ですね?

確かに動きました!コンポーネントは URL が index ファイルであることを期待しているんですよね?

単に home.htmlindex.html にリネームし、Nginx の設定を以下のように変更するだけで済みました:

        # その他の設定...
        root   /srv/www/zoethical.org/thx;
        index  index.html; # <- ここが重要です

        location = /TransHack_·Xist·nce… {
                default_type text/html;
                alias /srv/www/zoethical.org/thx/index.html; # <- そして一致します
        }
        location / {
                # 代理処理する前にローカルファイルを試すための nginx の魔法...
                try_files $uri $uri/ $uri.html @discourse;
        }
        location @discourse {
                # 通常の discourse プロキシ
        }

まとめると…

Discourse インスタンスと同じサイトに静的ページを使用している場合、Web サーバーが Discourse へのプロキシ処理を行う前に、静的ファイル(関連する CSS など)を読み取るようにしてください。これで完了です!

@pfaffman さん、ありがとうございます!

「いいね!」 3

実際にはバグが残っています:外部から https://thx.zoethical.org の URL を呼び出すことは機能しますが、Discourse 内でロゴをクリックしても、上書きされたページに戻る動きになりません。パーマリンクのチェックに気づいたため、いくつかのオプションを試しましたが、すべて失敗しました:

  1. https://thx.zoethical.org から /index.html へのパーマリンクを作成
  2. https://thx.zoethical.org から /TransHack_·Xist·nce… へのパーマリンクを作成
  3. これらを /index.html から /TransHack_·Xist·nce… へのパーマリンクと組み合わせる
  4. フロントエンド設定での /TransHack_·Xist·nce… へのリダイレクトを削除
  5. 外部 URL を指す custom_url パーマリンクを作成

問題は、ロゴをクリックした際にスクリプトがアプリケーション全体を再読み込みしようとせず、トップパスに内部リンクが紐付けられていることを期待している点にあると思われます。

homepage_url_override または(例えば custom_url のような)パーマリンクが絶対 URL を指す場合、ページが完全に再読み込みされることを期待します。

「いいね!」 2