You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apache2+WSGI环境下子目录部署Django的静态URL配置问题

Apache子目录部署Django:静态文件404问题解决配置

1. 调整Django项目核心配置

修改项目根目录下的settings.py:

  • 添加FORCE_SCRIPT_NAME = '/<subdirectory>',明确告诉Django它部署在指定子目录下,所有生成的URL都会自动带上这个前缀。
  • 修改STATIC_URL = '/<subdirectory>/static/',让静态文件的URL路径和部署结构匹配。
  • 确认STATIC_ROOT配置正确,这是收集静态文件的目标目录:
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')

执行命令收集所有静态文件到STATIC_ROOT:

python manage.py collectstatic

2. 配置Apache虚拟主机

打开你的Apache站点配置文件(比如/etc/apache2/sites-available/your-site.conf),做两处关键配置:

  • 绑定WSGI应用到子目录:
WSGIScriptAlias /<subdirectory> /<projectpath>/<projectname>/wsgi.py
WSGIPythonPath /<projectpath>
  • 直接让Apache处理静态文件请求,跳过Django,提升性能同时避免路径问题:
Alias /<subdirectory>/static/ /<projectpath>/staticfiles/
<Directory /<projectpath>/staticfiles/>
    Require all granted
</Directory>

注意要保证Apache对staticfiles目录有读取权限。

3. 规范模板中的静态文件引用

模板里的静态文件引用必须用Django提供的static标签,不要硬写绝对路径:

{% load static %}
<link rel="icon" href="{% static '<appname>/img/favicon.png' %}">

这样生成的URL会自动带上/<subdirectory>/前缀,和部署路径对齐。

4. 检查多语言路由(针对示例中的/en/前缀)

你的请求URL包含/en/多语言前缀,要确保i18n中间件在settings.py的MIDDLEWARE列表中,且LOCALE_PATHS配置正确。另外,Django的i18n_patterns默认不会拦截静态文件请求,只要STATIC_URL设置正确,静态文件就不会被多语言路由干扰。

最后重启Apache让配置生效:

sudo systemctl restart apache2

内容的提问来源于stack exchange,提问作者Stefan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 18:05:02