带.asp扩展名的URL无法触发IIS重写规则问题求助
解决Classic ASP站点带.asp URL无法触发重写规则的问题
问题根源
你的重写规则现在碰不上带.asp的URL,大概率是这俩原因:
- IIS里ASP模块抢在URL重写模块之前处理请求,发现文件不存在直接返回404,根本没走到重写环节
- Cloudflare的缓存或页面规则修改了请求路径,导致规则没匹配上
修复步骤
1. 调整重写规则,兼容带.asp的URL
把现有规则改成下面这样,既能匹配带/不带.asp的URL,又能避免IIS误判:
<rule name="articoliarchiviati" stopProcessing="true"> <match url="^articoli/archiviati/([0-9]+)-.+(\.asp)?$" /> <conditions logicalGrouping="MatchAll"> <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> </conditions> <action type="Rewrite" url="/articoli/archiviati/ArticleRendering.asp?id={R:1}" /> </rule>
- 匹配规则新增
(\.asp)?,不管URL结尾有没有.asp都能命中 - 保留原有条件,确保只处理不存在的文件/目录请求
2. 提升URL重写模块的处理优先级
IIS模块按顺序处理请求,得让重写模块先干活:
- 打开IIS管理器,找到目标站点,点击左侧的模块
- 在右侧列表中找到
UrlRewriteModule,点击上移,将其挪到ClassicAspModule前面 - 保存配置,重启站点
3. 检查IIS双重转义设置
如果URL包含特殊字符,IIS可能直接拦截导致规则不触发:
- 站点→请求筛选→右上角编辑功能设置
- 勾选允许双重转义,保存设置
4. 排查Cloudflare的影响
- 临时开启Cloudflare的开发模式(关闭缓存),测试带
.asp的URL能否正常重写,排除缓存干扰 - 检查页面规则:确认有没有针对
articoli/archiviati/*的规则修改了请求路径,比如强制跳转或缓存404响应 - 验证SSL/TLS模式:使用"灵活"或"完全"模式,避免请求在传输过程中被篡改
5. 测试规则有效性
用IIS自带功能验证规则是否匹配:
- 站点→URL重写→选中目标规则,点击右侧的测试模式
- 输入带
.asp的测试URL(比如/articoli/archiviati/32848-violenza-.asp),点击测试查看匹配结果
内容的提问来源于stack exchange,提问作者alena
相关产品推荐
相关产品推荐

