Azure App Service HTTPS下URL重写失效问题求助
解决HTTPS下旧域名跳转的证书主机名不匹配问题
看来你在旧域名HTTPS跳转新域名时踩了证书的典型坑——这个问题其实很常见,核心逻辑得先理清楚:HTTPS的TLS握手是在URL重写规则执行之前发生的,所以你之前的操作漏掉了最关键的旧域名HTTPS证书配置环节,才导致了证书主机名不匹配的错误。
问题根源拆解
当用户访问旧域名的HTTPS链接时,浏览器会先和服务器完成TLS握手:验证服务器返回的SSL证书是否与当前访问的域名匹配。如果你的Azure服务或web服务器没有为旧域名(包括子域名)配置对应的有效证书,握手直接失败,这时候你的web.config重写规则根本没机会执行,自然就弹出证书错误了。
具体解决步骤
为旧域名配置对应SSL证书
- 在Azure平台(比如App Service)中,为所有需要跳转的旧域名(含子域名)绑定有效的SSL证书。推荐使用通配符证书(如
*.old-domain.com),这样能一次性覆盖所有子域名,避免逐个配置的麻烦;也可以使用Azure自带的App Service证书,或者上传你自己的单域名证书。 - 注意:证书必须包含你要跳转的所有旧域名(包括www前缀、子域名等),否则依然会出现主机名不匹配。
- 在Azure平台(比如App Service)中,为所有需要跳转的旧域名(含子域名)绑定有效的SSL证书。推荐使用通配符证书(如
验证Azure的HTTPS监听与证书关联
- 登录Azure门户,进入你的服务(如App Service)的「自定义域名」页面,检查旧域名的HTTPS选项是否已开启,并且证书是否正确关联到该域名。确保每个需要跳转的旧域名都完成了这一步配置。
优化URL重写规则(确保覆盖全场景)
你的重写规则本身没问题,但可以调整为同时兼容HTTP和HTTPS场景,确保所有请求都能正确跳转:<rule name="Redirect Old Domain to New Domain" stopProcessing="true"> <match url="(.*)" /> <conditions> <!-- 匹配所有需要跳转的旧域名,包括子域名 --> <add input="{HTTP_HOST}" pattern="^old-domain.com$|^www.old-domain.com$|^sub.old-domain.com$" /> </conditions> <action type="Redirect" url="https://new-domain.com/{R:1}" redirectType="Permanent" /> </rule>可选:为旧域名添加强制HTTPS规则
如果需要先把旧域名的HTTP请求强制转为HTTPS再跳转,可以在上述规则之前添加这条(前提是已经完成旧域名的证书配置):<rule name="Force HTTPS for Old Domain" stopProcessing="true"> <match url="(.*)" /> <conditions> <add input="{HTTPS}" pattern="off" /> <add input="{HTTP_HOST}" pattern="^old-domain.com$|^www.old-domain.com$|^sub.old-domain.com$" /> </conditions> <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Permanent" /> </rule>
验证效果
完成配置后,用不同浏览器访问旧域名的HTTPS链接,或者使用SSL Labs的服务器测试工具检查证书有效性,确保所有旧域名的HTTPS请求都能顺利完成握手并跳转到新域名。
内容的提问来源于stack exchange,提问作者John Reiner
相关产品推荐
相关产品推荐

