IIS URL Rewrite正则规则异常:特定路径排除重定向失效
IIS URL Rewrite 规则修正:排除ACME验证路径的重定向
问题根源
你的规则失效核心原因是{PATH_INFO}变量在IIS中的取值范围有限,且正则匹配逻辑不够精准。{PATH_INFO}仅返回URL中物理文件路径之后的额外部分,而ACME验证请求(如/.well-known/acme-challenge/xxx)没有对应物理文件,导致该变量为空,条件判断完全失效。
修正后的规则
<rule name="Redirect EXAMPLE.com to www.EXAMPLE.com" stopProcessing="true"> <match url="(.*)" /> <conditions logicalGrouping="MatchAll"> <add input="{HTTP_HOST}" pattern="^EXAMPLE\.com$" /> <add input="{REQUEST_URI}" pattern="^/\.well-known/acme-challenge/.*$" negate="true" /> </conditions> <action type="Redirect" url="https://www.EXAMPLE.com/{R:0}" redirectType="Permanent" /> </rule>
关键调整说明
- 替换
{PATH_INFO}为{REQUEST_URI}:{REQUEST_URI}会返回完整的请求路径(包含开头的/),能准确匹配ACME验证的根路径请求。 - 修正正则表达式:将原正则
^.*/\.well-known/acme-challenge/.*$改为^/\.well-known/acme-challenge/.*$,确保匹配从根目录起始的验证路径,避免误匹配其他子路径下的同名目录。 - 显式声明
logicalGrouping="MatchAll":明确要求两个条件同时满足才执行重定向(默认也是该逻辑,但显式写出更易维护)。 - 添加
redirectType="Permanent":返回301永久重定向,优化浏览器缓存和SEO表现,可选但推荐。
验证方法
用curl工具测试两种场景:
- 测试ACME验证路径(不应被重定向):
curl -v http://EXAMPLE.com/.well-known/acme-challenge/test_validation - 测试普通路径(应被重定向到www域名):
curl -v http://EXAMPLE.com/about
内容的提问来源于stack exchange,提问作者Justin Swall
相关产品推荐
相关产品推荐

