IIS中URL重写后CSS及图片无法加载的问题求助
修复经典ASP IIS URL重写后静态资源加载问题
问题根源
你当前的Rewrite-to-http-verbs-handler规则用通配符.*匹配所有请求,导致CSS、图片这类静态资源请求也被强制转发到router2.asp处理。虽然浏览器显示状态码200,但实际返回的是ASP页面内容,而非静态文件本身。
修复方案
1. 修改重写规则,排除静态资源
更新web.config中的<rules>节点,添加条件排除已存在的静态文件请求,让IIS直接处理这些资源:
<rules> <rule name="Rewrite-to-http-verbs-handler"> <match url=".*" /> <!-- 排除已存在的静态文件和目录 --> <conditions> <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> <!-- 可选:如需精准排除特定后缀,可追加以下条件 --> <!-- <add input="{REQUEST_URI}" pattern="\.(css|js|png|jpg|jpeg|gif|ico|svg)$" negate="true" /> --> </conditions> <action type="Rewrite" url="/asp-app/routes/router2.asp" /> </rule> </rules>
2. 删除无效的出站规则
你配置的Rewrite css URLs出站规则针对响应内容类型,和当前静态资源被错误重写的问题无关,直接删除这部分代码:
<!-- 删除以下无效代码块 --> <rule name="Rewrite css URLs" preCondition="IsCSS" stopProcessing="true"> <match pattern="localhost/asp-app/data/styles" /> <action type="Rewrite" value="localhost/asp-app/styles" /> </rule> <preConditions> <preCondition name="IsCSS"> <add input="{RESPONSE_CONTENT_TYPE}" pattern="text/css" /> </preCondition> </preConditions>
3. 确认IIS静态内容功能已启用
确保IIS开启了静态内容模块:
- 打开服务器管理器 → 添加角色和功能 → 定位到Web服务器(IIS)→ Web服务器 → 常见HTTP功能 → 勾选"静态内容"
- 重启IIS服务生效
原理说明
添加IsFile和IsDirectory的否定条件后,只有当请求路径不是实际存在的文件或目录时,才会触发重写规则转发到router2.asp。静态资源会被IIS直接返回,不再经过ASP处理,浏览器就能正确加载CSS和图片内容。
内容的提问来源于stack exchange,提问作者M.Y.
相关产品推荐
相关产品推荐

