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

生产环境Django如何在cPanel Linux共享主机上托管用户上传媒体文件

Django cPanel环境媒体文件访问配置调整方案

现有配置问题

  • MEDIA_URL为空,未指定媒体文件的访问路由前缀
  • MEDIA_ROOT放在了静态文件收集目录staticfiles下,Whitenoise默认仅处理collectstatic生成的静态资源,不会托管用户动态上传的媒体文件
  • 生产环境(DEBUG=False)下Django默认不提供媒体文件访问服务,需要适配cPanel的请求规则

具体修改步骤

1. 调整settings.py配置

修改媒体相关配置,将媒体存储目录和静态文件目录分离:

STATIC_ROOT = BASE_DIR / 'staticfiles'
STATIC_URL = '/static/'
# 设置媒体文件访问前缀
MEDIA_URL = '/media/'
STATICFILES_DIRS =[
    BASE_DIR/ 'static'
]
# 单独设置媒体文件存储目录,放在项目根目录下
MEDIA_ROOT = BASE_DIR / 'media'

创建项目根目录下的media文件夹,用于存储所有用户上传的媒体文件。

2. 调整urls.py配置

确保媒体路由正确注册:

from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    # 保留原有所有路由规则
] 
# 补充媒体文件路由(开发环境生效,生产环境依赖cPanel重写规则)
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

3. 配置cPanel重写规则

在cPanel绑定域名对应的public_html目录下找到.htaccess文件,新增以下规则,注意替换路径为自己的项目实际路径:

# 媒体文件请求直接转发到media目录
RewriteRule ^media/(.*)$ /home/你的cPanel用户名/你的项目目录名/media/$1 [L]
# 原有passenger部署相关规则保留在下方

4. 配置目录权限

给media目录设置可读可写权限,确保网站运行用户可以读写该目录:

  • 命令行执行:chmod -R 755 /home/你的cPanel用户名/你的项目目录名/media
  • 也可以直接在cPanel文件管理器中右键media目录,修改权限为755

5. 重启服务验证

在cPanel的Python应用管理界面重启项目,或者在项目根目录创建tmp/restart.txt文件触发passenger重启。上传测试图片后访问你的域名/media/图片文件名即可正常访问。

注意:Whitenoise仅用于托管静态资源,不处理动态上传的媒体文件,上述配置将媒体请求直接通过Apache转发,性能更高也更稳定。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 18:06:02