我有一个用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
形式,但有时它不起作用。
答案 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文件结构的项目所在位置......如果存在,可以在模板中显示你的错误......