IIS 8 URL Rewrite模块:非WWW转WWW(排除子域名)需求
解决IIS 8 URL Rewrite子域名被误添加WWW前缀的问题
我明白你遇到的困扰了——原本只想把主域名(比如example.com)的非WWW版本重定向到www.example.com,结果连子域名(比如api.example.com)也被自动加上了www.前缀,完全不符合预期。咱们只需要给规则加个精准的条件判断,就能让主域名和子域名的行为区分开。
修改后的URL Rewrite规则
把你原来的规则替换成下面这段配置,注意把example.com替换成你自己的主域名:
<system.webServer> <rewrite> <globalRules> <clear /> <rule name="non-www to www (only main domain)" enabled="true" stopProcessing="true"> <match url=".*" /> <!-- 关键条件:仅当请求的主机头是纯主域名时才触发规则 --> <conditions> <add input="{HTTP_HOST}" pattern="^example\.com$" /> </conditions> <!-- 重定向到带WWW的主域名,保留原URL路径 --> <action type="Redirect" url="https://www.example.com/{R:0}" redirectType="Permanent" /> </rule> </globalRules> </rewrite> </system.webServer>
规则关键点解释
- 条件判断:
<add input="{HTTP_HOST}" pattern="^example\.com$" />这一行是核心,它会检查当前请求的主机头是否正好是你的纯主域名(没有任何子域名前缀)。像api.example.com这类子域名会因为不满足这个正则匹配,完全跳过这条规则。 - 重定向设置:
redirectType="Permanent"表示返回301永久重定向,对搜索引擎SEO更友好;{R:0}会保留原请求的完整URL路径,确保用户访问example.com/page1时会被正确转到www.example.com/page1。 - stopProcessing="true":设置为
true可以避免这条规则执行后,后续的其他规则继续处理该请求,提升效率同时防止冲突。
扩展说明
如果你的主域名有多个后缀(比如example.com和example.net),可以修改正则表达式来匹配多个主域名:
<add input="{HTTP_HOST}" pattern="^example\.(com|net)$" />
内容的提问来源于stack exchange,提问作者user2243110
相关产品推荐
相关产品推荐

