Apache只提供第一级Django静态文件目录

时间:2011-09-11 04:47:08

标签: django django-admin apache2

我有一个用Django制作的网站,我正在尝试将它部署在我已经躺着的Apache服务器上(使用官方文档推荐的mod_wsgi),并且在大多数情况下,一切都很好。我在让Apache正确提供与我的项目关联的静态文件时遇到问题。通过比较呈现的HTML的来源与我的服务器的文件结构来判断,我会说我的应用程序正在从正确的位置请求正确的文件,但无论出于什么原因,Apache都会抛出404.这是我的apache配置:

<VirtualHost *:80>
    ServerName book
    ServerAlias www.book.dev book.dev

    DocumentRoot /var/www/book


    Alias   /static/        /var/www/book/static
    Alias   /media/         /var/www/book/media

    <Directory /var/www/book/static>
            Order deny,allow
            Allow from all
    </Directory>

    WSGIScriptAlias / /home/rich/sites/book/apache/django.wsgi

    <Directory /home/rich/sites/book>
            Order allow,deny
            Allow from all
    </Directory>

</VirtualHost>

如果我在我的网络浏览器中导航到STATIC_ROOT(在本例中为www.book.dev/static),我会看到服务器上目录结构中第一级的(正确)列表。但是,尝试按照子目录的链接,甚至根目录中的文件,只产生404.我在2.X范围内使用Django 1.3,Python 2.6和某些版本的apache(无论是什么debian的软件包回购中的最新版本)

感谢任何帮助。

编辑:(情节变粗!)

所以,在摆弄了一些之后,我发现了一些我觉得很有意思的东西。我发现如果我运行开发服务器,那么从中提取静态内容的URL与Apache提供文件时生成的静态文件URL 相同。也就是说,它们都采用/static/<file>中配置的settings.py形式,但有时它不起作用。

2 个答案:

答案 0 :(得分:1)

尝试:

Alias   /static/        /var/www/book/static/
Alias   /media/         /var/www/book/media/

如果对子URL使用尾部斜杠,则目标文件系统路径也应该有一个尾部斜杠。

与文档相比:

http://code.google.com/p/modwsgi/wiki/ConfigurationGuidelines#Hosting_Of_Static_Files

答案 1 :(得分:0)

请仔细检查您的settings.py。寻找目录结构的逗号和逻辑。特别是关于STATIC_ROOT和MEDIA ...... dirs。 问题通常不是他们来自的地方。

你可以创建一个symink到apache目录......然后把它带到dev文件结构的项目所在位置......如果存在,可以在模板中显示你的错误......