没有新建虚拟目录为static,导致IIS 没有正确映射 /static/
在开发模式 (DEBUG=True) 下,Django 的 runserver 会自动提供静态文件访问,但在生产模式 (DEBUG=False) 下,Django 不会 提供静态文件,必须依赖 Web 服务器(如 IIS、Nginx、Apache)来处理静态文件请求。
在 IIS 站点中,如果直接访问 /static/xxx.png,IIS 默认会去站点的 wwwroot 目录下寻找,而不会自动去 C:\\myproject\\staticfiles。通过新建一个虚拟目录(Alias)static,并指向 C:\\myproject\\staticfiles,IIS 才能正确地将 /static/ 请求映射到收集的静态文件目录。
如何在 IIS 上正确配置 static 目录
1. 运行 collectstatic
前提:settings.py中设置了静态文件根目录
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
在 Django 项目目录下执行:
python manage.py collectstatic
这会把所有静态文件复制到 STATIC_ROOT 目录(例如 C:\\myproject\\staticfiles)。
2. 在 IIS 里创建虚拟目录
打开 IIS 管理器,选择你的网站(例如 Default Web Site)。
右键点击网站,选择 “添加虚拟目录”(Add Virtual Directory)。
别名(Alias) 填写 static(必须与 STATIC_URL = '/static/' 匹配)。
物理路径(Physical Path) 选择 C:\\myproject\\staticfiles。
点击 “确定”。目录出现如下图所示虚拟目录即成功。
虚拟目录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:\\myproject\\staticfiles 目录对 IIS 用户(IUSR 或 IIS_IUSRS 组)具有 读取 权限:
-
右键 staticfiles 目录 → 属性 → 安全 选项卡。
-
点击 编辑 → 添加 → 输入 IUSR,然后授予 读取 权限。
5. 测试是否能访问静态文件
-
运行 IIS,打开浏览器访问:
http://your-domain-or-ip/static/stub.png
-
如果能正确看到图片,说明配置成功。
评论前必须登录!
注册