IIS无法从/assets/node_modules/提供文件,如何重定向至主页?
IIS无法访问/assets/node_modules/目录资源的解决方法
针对你部署应用到IIS时遇到的404错误(无法加载该目录下的字体等资源),以下是直接可行的解决步骤:
1. 验证目录权限与物理路径
- 确认站点的物理路径正确指向应用根目录,服务器上确实存在
/assets/node_modules/目录 - 右键该目录→属性→安全,给
IIS_IUSRS和IUSR用户分配读取和执行、列出文件夹内容、读取权限
2. 配置字体文件的MIME类型
IIS默认可能未注册部分字体扩展名的MIME类型,导致无法识别资源:
- 打开IIS管理器→目标站点→MIME类型→添加:
- 扩展名:
.woff2,MIME类型:font/woff2 - 扩展名:
.woff,MIME类型:font/woff - 扩展名:
.ttf,MIME类型:font/ttf - 其他字体格式(如
.eot、.otf)同理添加对应MIME类型
- 扩展名:
3. 修复URL重写规则(替代无效的重定向)
如果是SPA类应用,之前的重定向方式不对,需在站点的web.config中添加正确的重写规则:
<rewrite> <rules> <!-- 映射assets/node_modules路径到根目录下的node_modules --> <rule name="Map node_modules assets" stopProcessing="true"> <match url="^assets/node_modules/(.*)$" /> <action type="Rewrite" url="/node_modules/{R:1}" /> </rule> <!-- SPA应用必备的 fallback 规则(如果是静态站点可忽略) --> <rule name="SPA fallback" stopProcessing="true"> <match url=".*" /> <conditions logicalGrouping="MatchAll"> <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> </conditions> <action type="Rewrite" url="/index.html" /> </rule> </rules> </rewrite>
注意:确保服务器已安装URL重写模块,未安装可通过IIS管理器的「模块」功能检查并下载安装。
4. 检查前端打包配置
- 部分前端框架(Vue/React等)打包时,会将node_modules资源合并到其他目录(如
/static),而非/assets/node_modules/ - 检查打包工具配置文件(如
vue.config.js、craco.config.js),确认publicPath设置正确,打包后是否生成了预期的/assets/node_modules/目录
5. 排查验证
- 直接在服务器浏览器访问资源路径(如
http://localhost/assets/node_modules/xxx/font.woff2),测试是否能正常下载 - 查看IIS日志(默认路径:
C:\inetpub\logs\LogFiles),找到对应404请求的详细错误信息,定位是路径、权限还是MIME类型问题
内容的提问来源于stack exchange,提问作者Bernardo Generoso
相关产品推荐
相关产品推荐

