允许任意主页(by Jay Pfaffman)

嗯,@hellekin 认为这值得单独开一个主题。我不太确定它是否已经准备好,但先在这里发布。我会在下周初查看相关内容,并努力确保它看起来是其他人真正能用的东西。:wink:

正如他所说:

17 个赞

@pfaffman 我尝试了以下设置:

  1. 安装你的主题组件
  2. home_url_override 设置为 https://thx.zoethical.org/TransHack_·Xist·nce…
  3. 添加一些 Nginx 配置以匹配该 HTML 文件:
        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),在这种情况下出现了功能异常。我可能愿意进行更多测试,包括更开放地访问该实例。即使将站点渲染为公开,访问主页时仍然显示“哎呀!该页面不存在或是私有的”。有什么想法吗?

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 实例所在的同一个站点上使用静态页面,请确保你的 Web 服务器在将请求代理到 Discourse 之前先读取静态文件(例如相关的 CSS)。搞定!

感谢 @pfaffman

3 个赞

实际上还有一个 bug:虽然从外部访问 URL https://thx.zoethical.org 可以正常工作,但在 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. 创建 custom_url 固定链接并将其指向外部 URL

我推测问题在于,点击徽标时脚本并未尝试重新加载整个应用,而是期望顶部路径绑定的是内部链接。

我期望的是,当 homepage_url_override 或(例如)custom_url 固定链接指向绝对 URL 时,页面应进行完整重新加载。

2 个赞