임의의 홈페이지 허용 (Jay Pfaffman)

음, @hellekin 님은 이것이 별도의 주제(topic)를 받을 가치가 있다고 생각하셨습니다. 제가 보기에는 아직 그럴 준비가 되지 않았을 수도 있지만, 여기 올려 봅니다. 다음 주 초에 내용을 살펴보고 다른 사람들이 실제로 사용할 수 있는 수준으로 보일 수 있도록 최선을 다해 보겠습니다. :wink:

그분이 말씀하신 대로:

17개의 좋아요

@pfaffman 다음 설정을 사용해 보았습니다:

  1. 테마 컴포넌트 설치
  2. home_url_override를 https://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 을 호출하면 작동하지 않습니다. 영구 링크(permalinks)에 대한 확인이 있다는 점을 확인했기 때문에 /에 영구 링크를 추가해 보았지만, 이것도 작동하지 않았습니다. 캐시 문제일까요?

참고로, 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.html을 index.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 인스턴스와 동일한 사이트에서 정적 페이지를 사용 중인 경우, 요청을 Discourse로 프록시하기 전에 웹 서버가 정적 파일(예: 관련 CSS)을 읽도록 확인하세요. 완성!

@pfaffman 님, 감사합니다!

3개의 좋아요

사실 버그가 남아 있습니다: 외부에서 URL https://thx.zoethical.org 을 호출하는 것은 작동하지만, Discourse 내부에서 로고를 클릭하면 오버라이드된 페이지로 돌아가지 않습니다. 영구 링크(permalink) 체크 기능이 있다는 것을 확인했기 때문에 여러 옵션을 시도해 보았으나 모두 실패했습니다:

  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. custom_url 영구 링크를 생성하여 외부 URL을 가리키도록 설정

이 문제는 로고를 클릭할 때 스크립트가 전체 애플리케이션을 다시 로드하려 하지 않고, 최상위 경로에 내부 링크가 연결되어 있다고 기대하기 때문에 발생하는 것으로 추정됩니다.

homepage_url_override 또는 (예를 들어 custom_url) 영구 링크가 절대 URL을 가리킬 경우, 페이지가 완전히 다시 로드되기를 기대합니다.

2개의 좋아요