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

如何在Apache共享主机上为Django 1.11.4提供媒体文件服务?

解决Django 1.11.4在Apache共享主机上的媒体文件服务问题

嘿,我来帮你搞定这个困扰!共享主机上部署Django媒体文件确实容易踩坑,尤其是把Debug切到False之后,Django就不再帮你处理静态/媒体文件了,得让Apache直接接手才行。结合你的情况,我给你整理一套针对性的步骤:

第一步:确认Django基础配置没问题

先再核对下你的settings.py里的媒体相关配置,务必用绝对路径(这是最容易出错的点!):

import os
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

MEDIA_ROOT = os.path.join(BASE_DIR, 'media')  # 媒体文件在服务器上的本地绝对路径
MEDIA_URL = '/media/'  # 前端访问媒体文件的URL前缀

另外,urls.py里原来的static()辅助函数不用删,它只会在Debug=True时生效,生产环境自动失效,刚好符合我们的需求。

第二步:给媒体文件夹设置正确权限

共享主机里,媒体文件夹(media/)和里面的上传文件必须让Apache服务器能读取。一般设置文件夹权限为755,文件权限为644就行。你可以通过主机控制面板的文件管理器或者SSH命令(如果有权限的话)来修改:

chmod 755 /path/to/your/project/media
chmod 644 /path/to/your/project/media/*

第三步:配置Apache直接服务媒体文件

这是核心步骤!因为是共享主机,你大概率没法修改全局Apache配置,所以用.htaccess文件来实现就行:

  1. 在你的项目根目录(或者主机指定的public_html/www这类网站根目录)创建.htaccess文件(如果已经存在就直接编辑)。
  2. 添加以下规则,注意把/path/to/your/project/media/换成你服务器上的绝对路径(比如/home/yourusername/yourproject/media/,可以通过主机控制面板的文件路径查看,或者用pwd命令在SSH里获取):
# 让Apache直接处理/media/路径的请求
Alias /media/ /path/to/your/project/media/

# 确保媒体目录的访问权限,同时禁止目录列表提升安全性
<Directory /path/to/your/project/media/>
    Require all granted
    Options -Indexes
</Directory>

如果你的主机用的是mod_wsgi,不用担心冲突——.htaccess里的Alias规则会优先匹配请求,不会让WSGI脚本拦截媒体文件的访问请求。

第四步:测试验证

把settings.py里的Debug改成False,如果主机支持的话重启Apache(或者等主机自动刷新配置),然后访问一个你已经上传的媒体文件,比如http://yourdomain.com/media/test.jpg。如果能直接打开,就说明配置成功了!

常见坑点提醒

  • 绝对路径错误:一定要保证MEDIA_ROOT和.htaccess里的路径完全一致,差一个字符都不行!可以在Django shell里执行print(MEDIA_ROOT)来确认。
  • 权限不足:如果访问媒体文件时出现403错误,大概率是权限没设置对,再检查下文件夹和文件的权限。
  • 浏览器缓存:有时候浏览器会缓存旧的错误响应,按Ctrl+F5强制刷新试试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:07:50