在IIS里做域名精准跳转,核心就两件事:先把域名绑定到对应站点,让请求按Host头分流;再用URL重写规则里的{HTTP_HOST}条件判断,把不同域名导到不同目标地址。 绑定决定“谁来接”,规则决定“往哪送”,两步都做对,跳转才准。
请求进来先看Host头,IIS分域名的底层逻辑
绑定列表就是一张路由表
用户访问a.example.com,DNS把IP给到服务器,浏览器在HTTP请求头里带上Host: a.example.com,IIS拿到这个头,去比对所有站点的绑定信息,谁的绑定列表里有这个主机名,请求就交给谁。
- 打开IIS管理器,左侧选中站点,右侧点“绑定”
- 类型选
http或https,IP填“全部未分配”或具体IP - 主机名填域名,不带
http://,也不带路径 - 一个站点可以绑多个主机名,多个站点也可以共用一个IP
所以想让不同域名跳向不同地方,最稳的做法是:每个域名至少有一个站点接住它,哪怕这个站点只放一条重写规则。
没匹配上的请求去哪了
这是很多人踩的第一个坑,如果请求的Host没在任何站点绑定列表里,IIS会把它丢给“默认网站”,结果就是本该跳转的域名,返回了一个莫名其妙的404,或者直接露出别的站点首页。
处理办法有两个:给默认网站设一条兜底重写规则,把所有不认识的Host统一301到主站;或者干脆停掉默认网站,逼着自己把绑定配全。
IIS绑定多个域名怎么设置跳转?两条路选一条
IIS里做跳转,主流就两种手段:URL重写和HTTP重定向,前者灵活,后者省事。
IIS多域名跳转配置步骤:URL重写方案
URL Rewrite不是IIS自带的,需要先从微软官方下载中心装URL Rewrite Module,装完重启IIS管理器才看得到图标。
假设要把old.example.com整站301到https://new.example.com,并保留原路径:
- 选中站点,双击“URL重写”,右侧点“添加空白规则”
- 名称随便起,比如
RedirectOldDomain - 请求的URL选“与模式匹配”,模式填
- 展开“条件”,添加条件:条件输入填
{HTTP_HOST},模式填^old\.example\.com$ - 操作类型选“重定向”,重定向URL填
https://new.example.com/{R:1},重定向类型选“永久(301)” - 保存,规则会写进站点根目录的
web.config
对应的web.config片段长这样:
<rule name="RedirectOldDomain" stopProcessing="true">
<match url="(.)" />
<conditions>
<add input="{HTTP_HOST}" pattern="^old\.example\.com$" />
</conditions>
<action type="Redirect" url="https://new.example.com/{R:1}"
redirectType="Permanent" />
</rule>
{R:1}是匹配到的路径部分,带上它,old.example.com/a/b?id=1才会跳到new.example.com/a/b?id=1,而不是统统落到首页,查询字符串默认会跟着走,不用额外处理。
一套规则里可以写多条,每条对应一个域名,IIS按顺序匹配,stopProcessing="true"让它命中就停。
HTTP重定向方案:适合整站搬家这种简单事
如果只是把一个域名的所有请求原样搬到另一个域名,用IIS自带的“HTTP重定向”功能更省心,前提是服务器角色里装了“HTTP重定向”功能,在服务器管理器的Web服务器角色服务里能勾上。
- 选中站点,双击“HTTP重定向”
- 勾选“将请求重定向到此目标”,填完整URL
- 勾选“将所有请求重定向到确切目标”,把路径拼上去
- 状态码选301,别默认302
它的局限也明显:一个站点只能设一个目标,判断条件只有“这个站点的所有请求”,做不了按域名、按UA、按参数分流。
IIS URL重写和HTTP重定向做域名跳转有什么区别
这两个功能经常被混着用,实际差别不小。
| 对比项 | URL重写(URL Rewrite) | HTTP重定向 |
|---|---|---|
| 判断条件 | 可用Host、端口、路径、UA、请求头等组合 | 基本只看站点归属 |
| 保留原路径 | 用{R:1}自由拼接 |
勾选选项后整体带过去 |
| 规则数量 | 单站点可写多条,按序执行 | 单站点一条 |
| HTTPS处理 | 可在规则里强制跳https并指定端口 | 需手动写全目标URL |
| 适合场景 | 多域名分流、换域名、旧链接映射 | 单域名整站搬迁 |
行业共识认为,凡是涉及三个以上域名或者要保留链接权重的场景,优先用URL重写;只有一个域名整站换掉、规则零散的,HTTP重定向足够,两者也能叠着用,但不建议,排错时容易互相干扰。
带路径、带参数的旧链接,跳转不能只跳首页
换域名时最怕一种情况:老站的几百篇文章链接,全部301到新站首页,搜索引擎会认为这些链接没有对应内容,原来积累的排名基本白费。
正确的处理是让路径原样传递,上面那条配{R:1}的规则已经做到了,如果新旧站的结构不一样,比如老站是/article/123.html,新站是/post/123,那就得用重写映射(Rewrite Map)做一张对照表,或者按栏目分组写多条规则。
还有一个细节:{HTTP_HOST}不包含端口,如果站点跑在非80端口上,判断Host的同时还得加一条{SERVER_PORT}条件,否则测试环境会把正式环境的请求也劫走。
HTTPS站点共用同一个IP时,绑定里要勾选“需要服务器名称指示”(SNI),不勾的话,证书按IP走,另一个域名的HTTPS请求会报证书错误,跳转还没开始就断了。
IIS域名跳转外包多少钱,自己配划算吗
这块没有统一报价,市面上通常按站点数量和规则复杂度算:单站点一条简单301,几百元就能解决;涉及几十上百条旧链接映射、HTTPS证书迁移、多语言站群分流的,报价会到几千元。
自己配划不划算,看三点:
- 域名数量在三个以内、规则不超过五条,看一遍文档半小时能搞定,没必要花钱
- 涉及大量旧链接对照、需要保证搜索排名平滑过渡的,找懂GEO的运维更稳
- 服务器上还跑着别的业务,改错一条规则可能连带影响其他站点,这种建议先备份
applicationHost.config再动手
据近年来的行业观察,换域名过程中排名波动大的案例,多数不是规则写错,而是漏配了部分子域名或旧路径,导致大量链接直接404,配置本身不难,难在覆盖全。
配完别急着收工,三个验证动作
用curl看状态码
命令行里跑curl -I http://old.example.com/a/b,看返回是不是301,Location头里的地址对不对,路径有没有丢,302说明重定向类型选错了,得改回Permanent。
检查有没有跳转链
老域名跳新域名,新域名又跳www,www再跳https,一条链三四跳,每次都要多一个往返,用浏览器的网络面板看请求序列,能合并的就合并,规则里直接一步到位写到最终地址。
留意缓存造成的假象
301会被浏览器长期缓存,HSTS更是直接把https写死,改完规则发现没生效,先换无痕窗口,或者临时改本机hosts指向测试机,别对着缓存里的旧结果反复改配置。
搜索资源平台那边,换域名后要及时提交改版规则,让抓取和索引跟着走,日志里重点看老域名的请求是不是还在返回200,返回200说明规则没命中。
IIS域名精准跳转常见疑问解答
一个站点绑定多个域名,能让它们各自跳到不同地址吗
可以,在同一个站点里写多条重写规则,每条用{HTTP_HOST}匹配一个域名,分别指定目标,规则按列表顺序执行,越具体的放越前面,如果要跳去的地方差异很大,拆成独立站点反而更好维护。
跳转规则写了但没生效,一般先查什么
先确认URL Rewrite模块装没装、站点根目录有没有web.config、规则是不是被更靠前的规则用stopProcessing截断了,再看请求是否真的落在了这个站点上绑定里没有对应主机名的话,请求根本不会进到这里。
301和302在换域名时该怎么选
换域名用301,告诉搜索引擎旧地址永久失效、权重转给新地址,临时的活动页、A/B测试用302,选错的影响是可逆的,但301缓存清起来麻烦,测试阶段可以先写302,确认无误再改成301。
图片来源于AI模型,如侵权请联系管理员。作者:酷小编,如若转载,请注明出处:https://www.kufanyun.com/ask/924076.html


评论列表(4条)
这篇文章的内容非常有价值,我从中学习到了很多新的知识和观点。作者的写作风格简洁明了,却又不失深度,让人读起来很舒服。特别是重定向部分,给了我很多新的思路。感谢分享这么好的内容!
读了这篇文章,我深有感触。作者对重定向的理解非常深刻,论述也很有逻辑性。内容既有理论深度,又有实践指导意义,确实是一篇值得细细品味的好文章。希望作者能继续创作更多优秀的作品!
@sunny500girl:这篇文章写得非常好,内容丰富,观点清晰,让我受益匪浅。特别是关于重定向的部分,分析得很到位,给了我很多新的启发和思考。感谢作者的精心创作和分享,期待看到更多这样高质量的内容!
@悲伤cyber54:这篇文章写得非常好,内容丰富,观点清晰,让我受益匪浅。特别是关于重定向的部分,分析得很到位,给了我很多新的启发和思考。感谢作者的精心创作和分享,期待看到更多这样高质量的内容!