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

Django子路径/app部署下静态文件配置异常求助

Django子路径(/app)下静态文件配置方案

针对部署在www.example.com/app路径下的Django 5.0项目,解决静态文件404问题的步骤如下:

1. 修正settings.py配置

确保以下参数设置正确,FORCE_SCRIPT_NAME指定子路径前缀,STATIC_URL/MEDIA_URL对应完整的URL路径:

FORCE_SCRIPT_NAME = "/app"
STATIC_URL = "/app/static/"
MEDIA_URL = "/app/media/"
STATIC_ROOT = "/home/hostxxx/domains/webpage.com/DjangoApp/static"
MEDIA_ROOT = "/home/hostxxx/domains/webpage.com/DjangoApp/media"

# 若项目有自定义静态文件源目录,添加以下配置(按需)
# STATICFILES_DIRS = [os.path.join(BASE_DIR, "static")]

2. 调整passenger_wsgi.py

Passenger环境下需显式设置SCRIPT_NAME环境变量,确保Django识别子路径前缀:

import os
import sys

# 将项目目录加入Python路径
sys.path.insert(0, os.path.dirname(__file__))

# 强制设置子路径前缀
os.environ['SCRIPT_NAME'] = '/app'
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "你的项目名称.settings")

from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

3. 配置urls.py静态文件路由

添加静态文件和媒体文件的路由映射,确保Django能正确处理开发环境的静态文件请求(生产环境建议由Web服务器直接处理):

from django.conf import settings
from django.conf.urls.static import static
from django.contrib import admin
from django.urls import path

urlpatterns = [
    path('admin/', admin.site.urls),
    # 此处添加你的其他应用路由
]

# 挂载静态文件与媒体文件路由
urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

4. 重新收集静态文件

执行命令将所有应用的静态文件复制到STATIC_ROOT指定的目录:

python manage.py collectstatic

5. 配置Web服务器(Passenger)

确保Web服务器正确映射静态文件路径,避免让Django处理静态文件请求(提升性能并避免路径错误):

Apache+Passenger示例配置

<Location /app>
    PassengerAppRoot /home/hostxxx/domains/webpage.com/DjangoApp
    PassengerBaseURI /app
    PassengerPython /path/to/your/python/env/bin/python
</Location>

# 直接映射静态文件URL到本地目录
Alias /app/static/ /home/hostxxx/domains/webpage.com/DjangoApp/static/
<Directory /home/hostxxx/domains/webpage.com/DjangoApp/static>
    Require all granted
</Directory>

Nginx+Passenger示例配置

location /app {
    passenger_base_uri /app;
    passenger_app_root /home/hostxxx/domains/webpage.com/DjangoApp;
    passenger_enabled on;
    passenger_python /path/to/your/python/env/bin/python;
}

# 直接映射静态文件URL到本地目录
location /app/static/ {
    alias /home/hostxxx/domains/webpage.com/DjangoApp/static/;
}

问题原因说明

  • 单独设置FORCE_SCRIPT_NAME在Passenger环境下可能失效,因为Passenger会自行覆盖该变量,需在passenger_wsgi.py中显式设置SCRIPT_NAME环境变量。
  • 若Web服务器未正确映射静态文件路径,会导致请求被转发至Django,引发路径解析错误,因此需让Web服务器直接处理静态文件请求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 23:07:44