IIS托管Angular应用:非www HTTPS访问正常,带www访问报404且重定向无效
故障排查方案
一、优先解决SSL层的证书不匹配问题(消除“连接不安全”提示)
浏览器弹出连接不安全提示是TLS握手阶段的故障,优先级远高于应用层的URL重定向规则:只要握手阶段证书校验不通过,web.config中配置的所有规则根本不会被执行。
- 打开IIS管理器,进入目标站点的「绑定」配置界面:
- 确认HTTPS(443端口)的绑定列表中,是否包含主机头为
www.example.com的独立绑定,而非仅为非www域名配置了443绑定。 - 双击当前443绑定使用的SSL证书,查看「使用者可选名称」列表,确认是否同时包含
example.com和www.example.com两个域名;如果列表中只有非www域名,说明当初通过wacs工具申请证书时,没有将www域名加入证书的信任范围。
- 确认HTTPS(443端口)的绑定列表中,是否包含主机头为
- 修复操作:重新运行wacs工具,为现有证书补充www域名作为可选名称,完成证书自动部署后,在IIS绑定中新增对应
www.example.com主机头的HTTPS条目。
二、排查重定向规则不生效的核心原因
完成证书层面的修复后,如果跳转规则仍未触发,按以下顺序排查:
- 规则顺序配置错误:IIS的URL Rewrite模块是按从上到下的顺序匹配规则的,如果将www跳转规则放在Angular路由重写规则(即把所有非静态资源请求重写到index.html的规则)之后,请求会先被前端路由规则拦截,跳转逻辑根本不会执行。必须将域名标准化跳转的规则放在所有重写规则的最顶部。
- 服务器级规则拦截:打开IIS根节点的URL Rewrite配置面板,切换到「查看服务器级规则」,确认是否存在全局规则对域名请求做了拦截,导致站点级web.config中的规则无法生效。
- 规则属性缺失:原跳转规则未指定重定向类型,建议补充
redirectType="Permanent"属性,让浏览器和搜索引擎正确识别永久跳转逻辑。
三、定位404错误的根因
- DNS解析校验:确认
www.example.com的A/CNAME记录指向和非www域名完全一致的服务器IP,避免解析错误将请求导向其他服务器触发默认站点的404响应。 - 站点绑定冲突排查:检查同一服务器IP+端口的绑定列表,确认
www.example.com的主机头没有被错误分配到其他无对应站点内容的站点上。IIS的主机头匹配优先级为精确主机头匹配>通配符绑定,如果www主机头被绑定到错误站点,请求根本不会进入目标站点的规则作用域,自然会返回404。
四、可直接复用的正确重定向配置
将以下规则放在web.config的<rewrite>/<rules>节点最顶部,确保域名跳转逻辑优先执行:
<rule name="Redirect WWW to non-WWW" stopProcessing="true"> <match url="(.*)" /> <conditions> <add input="{HTTP_HOST}" pattern="^example\.com$" negate="true" /> </conditions> <action type="Redirect" url="https://example.com/{R:1}" redirectType="Permanent" /> </rule>
配置完成后按顺序验证:
- 测试443端口对www域名的证书返回结果,确认证书同时覆盖两个域名,无握手报错。
- 清空浏览器缓存后访问www域名,通过开发者工具的网络面板确认请求返回301永久跳转状态,正确导向非www域名下的对应路径。
- 确认跳转完成后,Angular前端路由可正常加载,无404报错。
内容的提问来源于stack exchange,提问作者Gabriele Ottanelli
相关产品推荐
相关产品推荐

