IIS重定向规则在特定文件夹下失效问题排查
解决IIS重写规则中REDIRECT_WEBP_PRODUCTS不生效的问题
看起来你的Products路径重定向正常,但webp文件夹对应的规则没触发,我帮你分析下可能的原因和解决办法:
核心问题排查:条件匹配的准确性
你当前的规则里用了{HTTP_HOST}{REQUEST_URI}作为匹配输入,这可能引入不必要的变量(比如端口号、域名差异),导致正则匹配失效。比如如果你的站点访问时带了端口(如localhost:8080),{HTTP_HOST}会包含端口号,虽然正则的(.*)理论上能匹配,但实际可能因为字符串组合的细节导致匹配异常。
修复方案
修改REDIRECT_WEBP_PRODUCTS规则的条件部分,改用{REQUEST_URI}作为输入(直接匹配请求路径,更可靠),同时简化正则表达式:
<rule name="REDIRECT_WEBP_PRODUCTS" stopProcessing="false"> <match url=".*" /> <conditions logicalGrouping="MatchAny"> <add input="{REQUEST_URI}" pattern="/webp/" ignoreCase="true" /> </conditions> <action type="Redirect" appendQueryString="false" url="/mysite/content/img/logo.svg" redirectType="Permanent" /> </rule>
额外优化建议
- 使用相对路径重定向:把action里的绝对URL
http://localhost/mysite/content/img/logo.svg改成相对路径/mysite/content/img/logo.svg,这样不管站点部署的域名或端口是什么,都能正常跳转。 - 明确大小写忽略:添加
ignoreCase="true"确保匹配不区分大小写,避免因为URL路径大小写不一致导致的匹配失败。 - 规则顺序与stopProcessing:如果希望匹配到webp规则后不再处理后续规则,可以把
stopProcessing="false"改成true,不过当前设置不影响规则生效,只是会继续执行后续规则(对你的场景来说没问题)。
验证方法
修改后重启IIS站点,访问/mysite/content/img/banner/webp/b.webp,应该会自动重定向到logo.svg。如果还是不行,可以启用IIS的失败请求跟踪功能,查看规则匹配的详细日志,定位具体哪一步没触发。
内容的提问来源于stack exchange,提问作者Federico Rota
相关产品推荐
相关产品推荐

