IIS URL重写规则添加www前缀异常:仅第三域名生效排查
问题分析:添加WWW前缀重定向规则仅部分生效的原因及修复方案
你现在遇到的问题挺典型的——三个域名里只有remservsalarypackage.com.au能成功重定向到带www的版本,另外两个完全没反应。咱们来拆解一下你当前的规则问题出在哪,再给你两个靠谱的修复方案。
问题根源:正则表达式的两个致命问题
你规则里的条件部分 <add input="{HTTP_HOST}" pattern="^remserv(.*).com.au$" /> 有两个关键错误:
- 未转义的
.:正则里的.是通配符,能匹配任意字符,而不是你想要的字面意义上的点。这就导致匹配逻辑完全偏离了预期。 - 贪婪匹配的
(.*):(.*)会尽可能多地匹配字符,对于前两个短域名来说,它会把com.au的部分内容吃掉,导致整个pattern无法匹配完整的域名。
举个实际匹配的例子:
- 对
remserv.com.au,(.*)会匹配com,剩下的.au没法满足后面的.com.au,所以规则不触发。 - 对
remservlease.com.au,(.*)会匹配lease.com,剩下的.au同样不符合pattern,规则也不触发。 - 唯独
remservsalarypackage.com.au足够长,(.*)刚好匹配salarypackage,剩下的.com.au能和pattern对应上,所以规则生效了。
修复方案一:精确匹配指定域名(最稳妥)
直接把三个域名分别作为匹配条件,用逻辑或的方式组合,这样完全不会有歧义,适合域名数量不多的场景:
<rule name="add-www-prefix" enabled="true" stopProcessing="true"> <match url="(.*)" ignoreCase="true" /> <conditions logicalGrouping="MatchAny"> <add input="{HTTP_HOST}" pattern="^remserv\.com\.au$" /> <add input="{HTTP_HOST}" pattern="^remservlease\.com\.au$" /> <add input="{HTTP_HOST}" pattern="^remservsalarypackage\.com\.au$" /> </conditions> <action type="Redirect" url="http://www.{HTTP_HOST}/{R:1}" appendQueryString="true" redirectType="Permanent" /> </rule>
修复方案二:优化正则表达式(更简洁)
如果想只用一个正则搞定,就把所有的点转义(\.),同时用可选分组来匹配域名的后缀部分:
<rule name="add-www-prefix" enabled="true" stopProcessing="true"> <match url="(.*)" ignoreCase="true" /> <conditions> <add input="{HTTP_HOST}" pattern="^remserv(lease|salarypackage)?\.com\.au$" /> </conditions> <action type="Redirect" url="http://www.{HTTP_HOST}/{R:1}" appendQueryString="true" redirectType="Permanent" /> </rule>
这里的(lease|salarypackage)?表示这个分组是可选的:
- 空的时候匹配
remserv.com.au - 匹配
lease的时候对应remservlease.com.au - 匹配
salarypackage的时候对应remservsalarypackage.com.au
两种方案都能完美解决你的问题,选哪个看你个人偏好就行。
内容的提问来源于stack exchange,提问作者Manju
相关产品推荐
相关产品推荐

