8

我在设置 Apache 以提供静态 Django 文件时遇到问题。我在共享主机上,无权访问 Apache 配置文件。所有示例都Alias在 Apache 配置文件中使用,所以我试图弄清楚如何使用 .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,正如它在此处的文档中所说:

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

为此,我在 .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 文件。这是怎么回事?

4

1 回答 1

12

好吧,经过一整天的 .htaccess 正则表达式(yukk!),我终于找到了问题所在。

它实际上与 .htaccess 文件无关。问题出在我的settings.py 中 STATIC_URL。原来我必须设置STATIC_URL = '/mydjangoproject/static/'才能与STATIC_ROOT = '/home2/usr/public_html/mydjangoproject/static'我正在使用的网格相结合。

因此,这里的教训是,如果您将静态文件放在 Apache DocumentRoot 以外的任何位置(/home2/usr/public_html/在我的情况下),您必须相应地设置STATIC_URLin settings.py,而不是使用默认的/static/.

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

于 2012-12-30T07:56:31.097 回答