MVC获取当前页面URL返回错误域名?IIS多域名配置问题咨询
这是个在IIS多域名绑定场景里很常见的坑,我来帮你梳理下可能的原因和对应的解决思路:
IIS绑定顺序优先级问题
IIS处理多域名绑定的站点时,会按照绑定列表的顺序来选取主机头填充请求的Authority部分。如果你的站点绑定列表里www.z2.com排在www.z1.com前面,哪怕实际请求的是www.z1.com,IIS也会默认用排在前面的绑定主机头来生成请求Uri。
解决办法:打开IIS管理器,找到对应的站点→右键「编辑绑定」,把www.z1.com的绑定项移到列表最顶部。绑定配置的主机名错误
检查两个域名的绑定配置,有没有出现以下情况:- 其中一个绑定的主机名没设置(空值),这时候IIS会把这个默认绑定作为所有请求的主机头来源;
- 两个绑定的主机名都误设成了
www.z2.com。
确认每个绑定的主机名都准确对应目标域名,且没有空主机名的绑定与这两个域名冲突。
URL重写规则的强制替换
如果你的站点配置了URL重写模块,排查下是否有规则不小心把请求的主机头替换成了www.z2.com。比如有些统一域名的规则,可能写错了目标域名,导致所有请求的Host头都被改成了www.z2.com。
验证方法:打开IIS管理器→站点→URL重写,检查所有规则的「条件」和「操作」部分,看是否有修改HTTP_HOST或Uri主机部分的配置。反向代理/负载均衡的头传递问题
如果你的站点部署在负载均衡或反向代理(比如IIS ARR)后面,要确保代理服务器正确传递了原始请求的Host头。如果代理没有开启「转发主机头」的设置,IIS会使用站点绑定的默认主机头来生成请求Uri,而不是用户实际访问的域名。
解决办法:在代理配置里开启转发原始Host头的选项,比如ARR的服务器农场设置里,勾选「转发主机头」。
快速验证方法
你可以先在代码里输出HttpContext.Current.Request.ServerVariables["HTTP_HOST"],看看这个值是否是用户实际输入的域名:
- 如果这个值是正确的
www.z1.com,说明Url.GetLeftPart获取的Uri是被后续逻辑修改过的; - 如果这个值也是
www.z2.com,那问题肯定出在IIS绑定或代理配置层面。
内容的提问来源于stack exchange,提问作者Ehsan Akbar

