Windows10虚拟机IIS10中URL重写规则失效:非www域名无法添加响应头
以下是针对你的IIS URL Rewrite规则未触发、响应头未添加的具体排查点:
规则类型选错:用了入站规则而非出站规则
要修改响应头,必须创建出站规则(Outbound Rules),入站规则仅处理请求阶段,无法修改响应头。你可能误创建了入站规则,导致完全无法触发响应头修改逻辑。匹配条件逻辑颠倒
你的需求是给非www开头的域名添加头,所以条件应该设置为:输入变量选{HTTP_HOST},匹配类型选“与模式不匹配”,正则表达式写^www\.mydomain\.com$(注意转义点号)。如果反过来写成匹配www域名,自然不会给非www的请求加头。站点绑定未包含非www域名
检查IIS站点的绑定列表,确保mydomain.com(不带www)已经添加为绑定域名。如果请求的非www域名没有绑定到这个站点,请求根本不会进入该站点的规则处理流程,IIS日志自然也不会有规则触发记录。规则未启用
确认URL Rewrite规则列表中,你的规则左侧的复选框是勾选状态,规则状态为“已启用”。有时候创建规则后会忘记启用,导致完全不生效。正则表达式或匹配模式错误
针对域名匹配,不要用路径相关的匹配模式(比如^.*$这类匹配URL路径的),必须针对{HTTP_HOST}变量匹配域名。正确的正则应该是^mydomain\.com$(如果要精准匹配非www),或者用“不匹配”^www\.mydomain\.com$来覆盖所有非www的子域名情况。缓存干扰
测试前清空浏览器缓存,或者用curl -I https://mydomain.com命令直接从服务器请求,避免浏览器缓存的旧响应头影响测试结果。另外检查服务器端是否有静态缓存、CDN缓存等,确保请求能到达IIS并触发规则。URL Rewrite模块未正确安装或配置
虽然你说站点配置了这条规则,但可以重新验证模块:打开IIS管理器,查看站点功能视图中是否有“URL Rewrite”图标;或者在%windir%\system32\inetsrv\config\applicationHost.config中检查是否有<add name="Rewrite" />的模块注册。
内容的提问来源于stack exchange,提问作者Michael

