django在开发环境下可以加载静态文件,IIS部署到服务器无法加载静态文件
没有新建虚拟目录为static,导致IIS 没有正确映射 /static/
在开发模式 (DEBUG=True
) 下,Django 的 runserver
会自动提供静态文件访问,但在生产模式 (DEBUG=False
) 下,Django 不会 提供静态文件,必须依赖 Web 服务器(如 IIS、Nginx、Apache)来处理静态文件请求。
在 IIS 站点中,如果直接访问 /static/xxx.png
,IIS 默认会去站点的 wwwroot
目录下寻找,而不会自动去 C:myprojectstaticfiles
。通过新建一个虚拟目录(Alias)static
,并指向 C:myprojectstaticfiles
,IIS 才能正确地将 /static/
请求映射到收集的静态文件目录。
如何在 IIS 上正确配置 static 目录
1. 运行 collectstatic
前提:settings.py中设置了静态文件根目录
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
在 Django 项目目录下执行:
python manage.py collectstatic
这会把所有静态文件复制到 STATIC_ROOT
目录(例如 C:myprojectstaticfiles
)。
2. 在 IIS 里创建虚拟目录
-
打开 IIS 管理器,选择你的网站(例如
Default Web Site
)。 -
右键点击网站,选择 “添加虚拟目录”(Add Virtual Directory)。
-
别名(Alias) 填写
static
(必须与STATIC_URL = '/static/'
匹配)。 -
物理路径(Physical Path) 选择
C:myprojectstaticfiles
。 -
点击 “确定”。目录出现如下图所示虚拟目录即成功。
虚拟目录static默认继承了网站的处理程序映射设置doMyDjango,即所有请求均需通过wfastcgi.py来处理,但静态资源不需要这种处理,应用这种处理反而会出错。在IIS管理器显示的static主页中,双击“处理程序映射”选项,打开处理程序映射页面。在处理程序映射列表中,鼠标右键单击doMyDjango,在快捷菜单中选择“删除”命令将其删除。
第3、4步可省略
3. 配置 MIME 类型(防止静态文件无法加载)
-
在 IIS 站点 “MIME 类型” 里,确保
CSS
、JS
、PNG
等文件类型的 MIME 设置正确,例如:-
.css
→text/css
-
.js
→application/javascript
-
.png
→image/png
-
.woff
/.woff2
→font/woff
-
4. 赋予 IIS 访问权限
-
确保
C:myprojectstaticfiles
目录对 IIS 用户(IUSR 或IIS_IUSRS
组)具有 读取 权限:-
右键
staticfiles
目录 → 属性 → 安全 选项卡。 -
点击 编辑 → 添加 → 输入
IUSR
,然后授予 读取 权限。
-
5. 测试是否能访问静态文件
-
运行 IIS,打开浏览器访问:
http://your-domain-or-ip/static/stub.png
-
如果能正确看到图片,说明配置成功。