让“www”在 Discourse 中正常工作

你好,我想确保 www 子域名能将用户重定向到实际的 Discourse 安装地址。我认为这是必要的,以避免流失访客。大多数人在访问网站时都不会省略“www”。

3 个赞

您需要在注册商的 DNS 设置中为 www 添加一条 A 记录,指向服务器的 IP 地址。该 IP 地址与您当前为 domain.com 的 A 记录所指向的地址相同。

1 个赞

当用户通过带 www 的版本访问时,这会引起问题吗?Discourse 已设置为不包含 www。

1 个赞

不会,因为用户会被重定向。它不会在多个域名下提供同一个站点。

3 个赞

你需要这些指南。我正是出于完全相同的目的使用过它们:

4 个赞

你的意思是,仅添加 ‘www’ 的 A 记录还不够吗?我已经仔细阅读了那些文章。

如果未为两个“子域名”注册证书,我的网站在浏览器中会显示一条令人不快的错误消息。

1 个赞

我刚刚在 Digital Ocean 的 Droplet 上部署了 Discourse。关于第 2 步编辑 discourse.conf,这需要安装 nginx 吗?我不太确定,但我觉得我的 Droplet 上并没有安装 nginx,而且我不知道该如何安装它。

我认为这份指南解释了那部分内容:

https://meta.discourse.org/t/running-other-websites-on-the-same-machine-as-discourse/17247/294

1 个赞

是的,为 www 添加一条指向同一 IP 的 A 记录就足以重定向流量。

您无需按照其他指南中的步骤操作,只需将 A 记录指向该 IP 即可实现简单重定向。

除非绝对必要,否则请勿使您的安装过程复杂化。

3 个赞

但这是否足以避免浏览器出现 NET::ERR_CERT_COMMON_NAME_INVALID 错误呢?如果我在 www 子域上安装 Discourse,通过 https://example.com 访问网站时会提示该错误。只有使用 https://www.example.com 才能正常访问。

这就是为什么你需要使用重定向,Discourse 无法从多个 URL 提供服务。

选择一个,将另一个重定向过去。

1 个赞

我遇到了类似的问题,在 DNS 级别使用 URL 重定向记录无法解决我的问题。

我使用主机名 ‘www.example.com’ 安装了 Discourse,并配置了以下 DNS 记录:

A 记录             主机:WWW      值:my_server_ip
CNAME              主机:@        值:www.example.com
URL 重定向记录     主机:@        值:https://www.example.com

如果我使用 SSL Server Test (Powered by Qualys SSL Labs) 检查不带 WWW 的 URL https://example.com,我会收到证书名称不匹配的错误,并在浏览器中看到 NET::ERR_CERT_COMMON_NAME_INVALID 错误。

如果是我忽略了什么显而易见的问题,再次表示歉意,网络并不是我的强项!

1 个赞

这就是为什么我发布了那些链接。我本来希望它仅仅通过更改 DNS 就能解决,但对我来说似乎没那么简单。要通过 HTTPS 工作,我必须确保为两个地址都注册了证书。要实现这一点,请使用我上面发布的其中一份指南。另一份指南则允许你执行重定向。

用户在输入 URL 时通常不太可能指定协议。如果您确实担心这个问题,可以直接使用 Cloudflare 的 DNS 服务并设置一个简单的页面规则。

1 个赞

是的,我“迁移”了我的域名(其实只是去掉了 www),这就是为什么我必须为那些我无法控制的网站上已有的、指向我旧域名的链接提供 https 的访问。这可能解释了为什么在我这种情况下,我别无选择,只能完成全套工作。

所以,你的意思是,如果你只是希望有人输入 www.example.com 时能被重定向到 https://example.com,那么只需更改 DNS 设置即可?

但是,如果出于任何原因你希望 https://www.example.com 也能正常工作(在我这种情况下是需要的,因为这类链接已经“散落在外”了),那么你就必须按照提供的指南操作。

或者,正如上文所述,只需使用页面规则即可。它将使用通配符证书为域名提供前端服务,并无缝重定向流量。

这一切都不会给 Discourse 服务器带来任何额外的复杂性。

1 个赞

什么是页面规则?

我打算按照 How To Install Discourse Behind Nginx on Ubuntu 14.04 | DigitalOcean 的教程,在 Digital Ocean 的 Droplet 上安装 Nginx,然后应用“步骤 2”中列出的规则,将请求重定向到正确的域名。我认为这应该可行!我明天会尝试一下,看看是否能够将 https://www.、http://wwwhttp://domain.comhttps://domain.com 的所有组合都重定向到我的 Discourse 主机名,该主机名对应的 Lets Encrypt 证书是 https://www.domain.com

拭目以待!

@Erik_Manger,基于 DNS 的解决方案在 SSL 环境下对我无效。我使用了 @merefield 提供的第一个链接,效果很好。

您需要在 Discourse 前安装 Nginx 才能使此功能正常工作吗?在我的 Digital Ocean Droplet 上,额外钩子中使用的路径 “/etc/nginx/” 不存在。