我在设置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文件。发生了什么事?
答案 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/
。
希望这能帮助一些可怜的灵魂忍受我的所作所为!