我只是迁移了一个旧的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/