如何通过.htaccess仅对指定域名执行301永久重定向?
指定域名下特定路径的301重定向方案
这个场景太常见了!直接用Redirect指令确实会对所有绑定到服务器的域名生效,要实现仅指定域名下的特定路径做301重定向,得给规则加上域名判断才行。我给你分两种主流服务器的解决方案:
Apache服务器方案
方法1:用指令(Apache 2.4+推荐)
如果你用的是Apache 2.4及以上版本,
<If "%{HTTP_HOST} in {'domain1.com', 'domain2.com'}"> Redirect 301 /some/old/uri http://www.example.com/new/uri </If>
原理很简单:只有当请求的域名是domain1.com或domain2.com时,里面的Redirect指令才会生效,其他域名的同路径请求完全不受影响。
方法2:用mod_rewrite(兼容老版本Apache)
如果你的Apache版本比较老,或者已经在使用mod_rewrite模块,用RewriteCond来匹配域名是更稳妥的选择:
RewriteEngine On # 匹配指定的两个域名,[NC]表示不区分大小写 RewriteCond %{HTTP_HOST} ^(domain1|domain2)\.com$ [NC] # 匹配目标路径,执行301重定向,[L]表示这是最后一条规则 RewriteRule ^some/old/uri$ http://www.example.com/new/uri [R=301,L]
要是有多个路径需要定向,只需要保留RewriteCond,新增对应的RewriteRule就行。
Nginx服务器方案
如果你的站点跑在Nginx上,配置起来更直接,通过server_name指定生效域名,再在location里设置重定向:
server { listen 80; # 指定要生效的域名 server_name domain1.com domain2.com; # 精准匹配目标路径,返回301重定向 location = /some/old/uri { return 301 http://www.example.com/new/uri; } # 这里可以放这两个域名的其他业务配置 }
其他域名的请求会走对应的server块,不会触发这个重定向规则。
小提示
测试的时候建议先用302临时重定向,等确认规则没问题了再改成301——毕竟301是永久重定向,会被浏览器缓存,要是配置错了清理缓存挺麻烦的。
内容的提问来源于stack exchange,提问作者keszthelyi
相关产品推荐
相关产品推荐

