我只是迁移了一个旧的Django项目以使用staticfiles应用程序。在此之前,我在名为static的目录中拥有所有需要的文件,这些文件直接在服务器根目录下提供。现在可以在STATIC_URL下提供此目录,很好,除了应该直接在服务器根目录下提供的文件。

我知道如何直接从根目录(例如/favicon.ico或/robots.txt)提供文件,但是我应该将它们放在哪里?如果我将它们放在STATIC_ROOT下的任何位置,则将通过两个URL(例如/file.txt和/static/foobar/file.txt)来提供服务,这不是一个好习惯。

有任何想法吗?

最佳答案

将它们保持静态,并使您的网络服务器将/static/favicon.ico重定向到/favicon.ico

要更完整地回答:

如果您有文件favicon.ico,则这是一个静态文件,因此应在STATIC_ROOT内部。但是,此文件是正常规则的例外,您不希望它存在于/static/favicon.ico,而是希望它存在于/favicon.ico。由于这是该规则的例外,因此,您只为此文件添加一个特殊规则到您的Web服务器配置中,以便在/favicon.ico处也可以使用该规则。

现在,您拥有由2个不同的网址提供的相同资源,这是一件坏事。由于您不加限制地添加了规则以使文件在/处提供,因此我们假定这是规范的URL,并告诉Web服务器将/static/favicon.ico重定向到/favicon.ico。现在,您拥有从一个位置提供的相同资源。

/static/根目录中的其他文件将不受此影响,因为在Web服务器中为favicon.ico设置的规则中,由于该文件(以及您想要的任何其他文件)的特殊性质,您指定了favicon.ico/投放)。

关于django - 应将应直接提供服务的静态文件放在服务器根目录下的何处?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6574619/

10-14 23:03
查看更多