配置htaccess以提供静态django文件

时间:2012-12-29 16:56:59

标签: python django apache .htaccess mod-rewrite

我在设置Apache以提供静态Django文件方面遇到了麻烦。我在共享主机上,无法访问Apache配置文件。所有示例都在Apache配置文件中使用Alias,所以我试图弄清楚如何在.htaccess中使用mod_rewrite。

我的setup.py看起来像这样:

STATIC_ROOT = '/home2/usr/public_html/mydjangoproject/static'
STATIC_URL = '/static/'

我在终端中运行了python manage.py collectstatic并完成了它的工作,现在我在/public_html/mydjangoproject/static下面有一个目前有子文件夹admin及其内容的文件夹。

现在我正在尝试将apache配置为仅提供静态文件而不是通过mod_wsgi,正如文档here中所述:

  

我们强烈建议使用django.contrib.staticfiles来处理   管理文件(以及前面概述的Web服务器)   部分;这意味着使用collectstatic管理命令   收集STATIC_ROOT,中的静态文件,然后配置Web   服务器在STATIC_URL 上提供STATIC_ROOT

为此,我在.htaccess文件中添加了第3行,如下所示。此文件位于/home2/usr/public_html/mydjangoproject/.htaccess

我的.htaccess文件:

AddHandler fcgid-script .fcgi
RewriteEngine On
RewriteRule /static/ /home2/usr/public_html/mydjangoproject/static
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ mysite.fcgi/$1 [QSA,L]

请注意,我在使用和不使用尾部斜杠的情况下尝试了第3行,但没有效果。

当我访问www.mysite.com/mydjangoproject/static/时,我收到500内部服务器错误。同样,管理页面仍然没有获得它需要的css文件。发生了什么事?

1 个答案:

答案 0 :(得分:11)

好吧,经过一整天的.htaccess regexes(yukk!),我终于找到了问题。

它实际上与.htaccess文件无关。问题出在我的 settings.py STATIC_URL中。事实证明我必须设置STATIC_URL = '/mydjangoproject/static/'才能与我正在使用的STATIC_ROOT = '/home2/usr/public_html/mydjangoproject/static'进行网格划分。

所以这里的教训是,如果你将静态文件放在Apache DocumentRoot以外的任何地方(我的情况为/home2/usr/public_html/),你必须在 settings.py <中设置STATIC_URL / strong>相应地,而不是使用默认的/static/

希望这能帮助一些可怜的灵魂忍受我的所作所为!