托管Apache的Django静态文件

pbossiut  于 2022-11-16  发布在  Apache
关注(0)|答案(4)|浏览(109)

我正在尝试将一个Django站点从开发服务器阶段转移到一个真实的的托管环境中。目前,我只是在我的个人机器上托管。我已经安装了Apache和mod-wsgi,但是我在启动静态文件时遇到了问题。我很确定这与Apache有关。下面是我的站点配置文件:

<VirtualHost *:80>

    ServerName localhost
    ServerAlias daifotis.dyndns.org
    ServerAdmin webmaster@daifotis.com

    DocumentRoot /home/daifotis/code/

    Alias /media/ /home/daifotis/code/feris/sitestatic
    Alias /static/ /home/daifotis/code/feris/sitestatic
    #AliasMatch ^/([^/]*\.css) /home/daifotis/code/feris/sitestatic/$1

    <Directory /home/daifotis/code/feris/sitestatic>
        Order allow,deny
        Allow from all
    </Directory>

    <Directory /home/daifotis/code/feris>
        Order allow,deny
        Allow from all
    </Directory>

    <Directory /home/daifotis/code/feris/jobsite>
        Order allow,deny
        Allow from all
    </Directory>

    WSGIDaemonProcess feris processes=2 threads=15 display-name=%{GROUP}
    WSGIProcessGroup feris

    WSGIScriptAlias / /home/daifotis/code/feris/apache/django.wsgi

    <Directory /home/daifotis/code/feris/apache>
        Order allow,deny
        Allow from all
    </Directory>

</VirtualHost>

我试着把文件放在我用static命名的目录中。当我试着加载网站时,所有的内容都出现了,但没有css。而且,当我点击我的url www.server.com/static/时,页面显示了目录的正确内容。但我不明白的是,为什么如果我点击一个链接来查看一个文件,它说,网址不存在。我一直在这一段时间,所以任何帮助将不胜感激。

tzxcd3kk

tzxcd3kk1#

我发现了一个apache配置错误:

Alias /static/ /home/daifotis/code/feris/sitestatic

我应该写static的时候不带斜杠。如果带斜杠,Apache就不会展开URL路径。

Alias /static /home/daifotis/code/feris/sitestatic
okxuctiv

okxuctiv2#

我假设你使用的是Django 1.3,以及提供静态文件的“新”方式。你能给我们看看你的settings.py文件中与媒体和静态相关的设置吗?根和URL版本。同时显示你的STATICFILES_DIRS。
最有可能的原因是Django只被配置为使用contrib.staticfiles来提供静态文件,您可能需要运行管理命令python manage.py collectstatic来将所有应用程序的静态文件收集到一个目录中,以供apache使用。
关于使用django.contrib.staticfiles的设置,请参阅我的答案。
如果您的静态文件100%存在于Alias /static/ /home/daifotis/code/feris/sitestatic指向的目录中,那么您对apache的权限可能配置不正确。您是否检查过/var/log/httpd/error_log文件,查看在尝试提供静态内容时是否存在IOPermissions错误?

c9qzyr3d

c9qzyr3d3#

我知道这是一个老问题,但我也遇到过同样的问题,我试过了所有的方法,结果发现我在apache中启用了app.conf,但忘了在apache服务器中禁用000-default.conf。

j8yoct9x

j8yoct9x4#

我知道这是旧的线程,但如果有人还在寻找答案,这里是一步一步的程序(使用django4.1)。对不起,我的英语不好。
1.添加静态url、静态根目录和静态目录到settings.py

STATIC_URL = '/static/'
 STATIC_ROOT = os.path.join(BASE_DIR, "static")
 STATICFILES_DIRS = os.path.join(BASE_DIR, "static")

1.运行python collectstatic命令,这会将所有文件从静态文件夹复制到STATIC_ROOT目录

python manage.py collectstatic

1.更新apache配置文件

Alias /robots.txt /path/to/your-prj/static/robots.txt
 Alias /favicon.ico /path/to/your-prj/static/favicon.ico

 Alias /media/ /path/to/your-prj/media/
 Alias /static/ /path/to/your-prj/static/

 <Directory /path/to/your-prj/static>
 Require all granted
 </Directory>

 <Directory /path/to/your-prj/media>
 Require all granted
 </Directory>

1.重新启动Apache
这是官方文件,如果你想查的话。

相关问题