Apache无法在Django的静态目录中加载样式表和脚本

时间:2011-09-05 04:40:07

标签: django apache mod-wsgi wsgi

我正在使用Django开发一个网站。到目前为止,当我在开发环境中使用它时它工作正常,正常加载所有样式表和脚本。但是,我目前已经转移到使用带有mod_wsgi的Apache Web服务器来生成Django页面的生产环境。现在,当我查看该站点时,它报告无法加载css和js文件,并返回错误代码403 - 拒绝访问。我的网站是"C:\Users\rohitm\Web Applications\WebApp"目录。我在"C:\Program Files\Apache Software Foundation\Apache2.2"安装了Apache 2.2。我编辑了Apache安装文件夹中conf子目录下的httpd.conf文件,如下所示:

Alias /static/ "C:/Users/rohitm/Web Applications/WebApp/static"
<Directory "C:/Users/rohitm/Web Applications/WebApp/static">
Order allow,deny
Allow from all
</Directory>

Alias /static/images/ "C:/Users/rohitm/Web Applications/WebApp/static/images"
<Directory "C:/Users/rohitm/Web Applications/WebApp/static/images">
Order allow,deny
Allow from all
</Directory>

Alias /static/javascript/ "C:/Users/rohitm/Web Applications/WebApp/static/javascript"
<Directory "C:/Users/rohitm/Web Applications/WebApp/static/javascript">
Order allow,deny
Allow from all
</Directory>

Alias /static/stylesheets/ "C:/Users/rohitm/Web Applications/WebApp/static/stylesheets"
<Directory "C:/Users/rohitm/Web Applications/WebApp/static/stylesheets">
Order allow,deny
Allow from all
</Directory>

Alias /static/admin/ "C:/Users/rohitm/Web Applications/WebApp/static/admin"
<Directory "C:/Users/rohitm/Web Applications/WebApp/static/admin">
Order allow,deny
Allow from all
</Directory>

WSGIScriptAlias / "C:/Users/rohitm/Web Applications/WebApp/apache/django.wsgi"
<Directory "C:/Users/rohitm/Web Applications/WebApp/apache">
Order allow,deny
Allow from all
</Directory>

我在我的WebApp文件夹下的apache文件夹中创建了一个文件django.wsgi。内容如下:

import os
import sys
sys.path.append('C:/Users/rohitm/Web Applications/')
sys.path.append('C:/Users/rohitm/Web Applications/WebApp/')
os.environ['DJANGO_SETTINGS_MODULE'] = 'WebApp.settings'

import django.core.handlers.wsgi

application = django.core.handlers.wsgi.WSGIHandler()

settings.py中的静态文件设置如下

STATIC_ROOT = 'C:/Users/rohitm/Web Applications/WebApp/static/'

STATIC_URL = '/static/'

ADMIN_MEDIA_PREFIX = '/static/admin/'

运行manage.py collectstaic命令后,静态文件夹有4个子文件夹 - adminimagesstylesheetsjavascript。样式表文件夹包含文件main.css,而javascipt文件夹包含文件jquery.min.js。 admin文件夹中包含所有与管理员相关的css和js。现在每当我通过http://localhost查看网站时,都不会加载css和javascript文件,而浏览器控制台(Chrome - Crtl + Shift + J)报告文件无法加载,因为服务器响应错误403(禁止)。

请帮忙。

2 个答案:

答案 0 :(得分:3)

删除给予Alias指令的第一个路径上的尾部斜杠,或者将尾部斜杠添加到第二个路径。尾部斜杠的使用应该是平衡的,即,不要在两者之间,或两者之间。

您还只需要静态文件所在的顶级目录的别名/目录块。您不需要为所有子目录枚举它。因此使用:

Alias /static "C:/Users/rohitm/Web Applications/WebApp/static"
<Directory "C:/Users/rohitm/Web Applications/WebApp/static">
Order allow,deny
Allow from all
</Directory>

现在注意使用'/ static'而不是'/ static /'。

答案 1 :(得分:0)

我猜想运行Apache的用户无法访问C:/Users/rohitm/Web Applications/WebApp/static文件夹。

一般情况下,最好将这些文件放在中央位置,而不是放在个人主目录中。