# 启用“禁止匿名用户下载文件”时，“/uploads/”中的主题资源无法加载

**URL:** https://meta.discourse.org/t/theme-assets-served-from-uploads-break-when-prevent-anons-from-downloading-files-is-enabled/386380
**Category:** Bug
**Created:** [2025 年10 月 21 日 23:12 UTC](https://meta.discourse.org/t/theme-assets-served-from-uploads-break-when-prevent-anons-from-downloading-files-is-enabled/386380 "2025-10-21T23:12:21Z")
**Posts on this page:** 3
**Page:** 1

<div class="post-metadata">

### Author: ![lhkjacky](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/lhkjacky/32/204198_2.png) [@lhkjacky](https://meta.discourse.org/u/lhkjacky)
#### Post date: [2025 年10 月 21 日 23:12 UTC](https://meta.discourse.org/t/theme-assets-served-from-uploads-break-when-prevent-anons-from-downloading-files-is-enabled/386380/1 "2025-10-21T23:12:21Z")

</div>

当主题组件在其 `about.json` 中声明资源时，Discourse 会将它们存储在 `/uploads/` 下并提供服务。  
如果启用了站点设置“ **阻止匿名用户下载文件** ”，则这些主题资源对于匿名用户会返回 `404`，因为它们被视为受保护的上传文件。  
这可能会破坏任何动态加载自身 JavaScript 的主题或组件——例如，“ **主题列表预览** ”组件。

* * *

### **重现步骤**

1. 安装“ **主题列表预览** ”组件（`https://github.com/merefield/discourse-tc-topic-list-previews`）。
2. 验证它是否能正确加载给已登录和匿名用户。
3. 启用站点设置“ **阻止匿名用户下载文件** ”。
4. 以未登录用户身份访问论坛主页，并检查浏览器控制台。

* * *

### **观察到的行为**

- 对文件的请求，例如

- 浏览器控制台显示：

- 依赖该文件的组件（例如，主题列表预览中的 `preview-edits.gjs`）未能运行，导致布局问题。

* * *

### **预期行为**

在 `about.json` 中定义的主题资源应始终 **公开可访问** ，无论“阻止匿名用户下载文件”设置如何。  
它们是静态资源，不是用户上传的文件，不应继承上传文件的访问限制。

* * *

### **技术细节**

- Discourse 版本：3.6.0.beta2 (最新)

- 组件：“ **主题列表预览** ”（`https://github.com/merefield/discourse-tc-topic-list-previews`）

- 相关的 `about.json` 片段：

- 在主题安装期间，Discourse 会将此文件存储为 `/uploads/default/original/...` 下的 `Upload`。

- 启用匿名限制会导致 Discourse 阻止对该路径的请求，即使它是主题资源。

* * *

### **建议的解决方案**

通过 `about.json` 上传的主题资源应：

- 从专用路径（例如 `/theme-assets/` 或 `/assets/`）提供服务  
**或**
- 豁免“阻止匿名用户下载文件”的限制。

* * *

### **影响**

这会影响任何依赖客户端动态加载的主题资源（JS/CSS/图片）的主题或组件。  
当匿名下载限制开启时，会破坏匿名访问者主要 UI 组件的功能。

---

<div class="post-metadata">

### Author: ![sam](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/sam/32/102149_2.png) [@sam](https://meta.discourse.org/u/sam)
#### Post date: [2025 年10 月 22 日 05:51 UTC](https://meta.discourse.org/t/theme-assets-served-from-uploads-break-when-prevent-anons-from-downloading-files-is-enabled/386380/3 "2025-10-22T05:51:26Z")

</div>

感谢您如此详细的描述，我同意在这里做些什么是有意义的。

---

<div class="post-metadata">

### Author: ![david](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/david/32/157490_2.png) [@david](https://meta.discourse.org/u/david)
#### Post date: [2025 年10 月 22 日 10:54 UTC](https://meta.discourse.org/t/theme-assets-served-from-uploads-break-when-prevent-anons-from-downloading-files-is-enabled/386380/4 "2025-10-22T10:54:01Z")

</div>

我不认为这仅限于主题资源。启用该设置似乎还会破坏匿名用户的网站徽标、网站图标等。该实现完全阻止了匿名用户访问 `/uploads/*`。

@lhkjacky，您的网站对匿名用户来说徽标也显示不正常吗？
