非WWW转WWW及指定顶级域名重写规则优化求助
解决多域名到www.example.com的301重定向问题
你现在的规则确实只覆盖了example.co.uk(不管带不带www前缀)的重定向场景,没处理example.com裸域名跳转到www.example.com的情况。这里有个简洁的规则集,能一次性搞定所有你需要的重定向需求:
# 过滤掉已经是目标域名的请求,避免循环重定向 RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC] # 仅匹配我们需要处理的两个域名(带/不带www都包含) RewriteCond %{HTTP_HOST} ^(www\.)?(example\.co\.uk|example\.com)$ [NC] # 永久重定向到目标域名,保留原请求路径 RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]
我给你拆解下每条规则的作用:
- 第一条
RewriteCond:检查当前请求的主机名不是www.example.com(!^表示取反,[NC]忽略大小写),这样就不会对已经是目标地址的请求做处理,防止出现循环重定向的问题。 - 第二条
RewriteCond:专门限定只处理我们关心的两个域名——不管带不带www的example.co.uk和example.com,如果你的服务器上还绑定了其他站点,这条规则能避免误操作影响其他域名。 RewriteRule:把请求的完整路径(^(.*)$)原封不动地重定向到https://www.example.com/$1,[R=301]是永久重定向,对SEO更友好;[L]表示这是最后一条执行的规则,匹配后就不再往下走了。
如果你的站点已经启用了HTTPS,建议用https://作为目标协议;如果还没配置HTTPS,暂时用http://也可以,后续切换时再修改就行。
要是你确定服务器上只有这两个域名,还可以简化掉第二条RewriteCond,直接用下面的版本,更精简:
RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC] RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]
不过还是更推荐带第二条条件的版本,安全性更高,能避免意外重定向其他可能绑定的域名。
内容的提问来源于stack exchange,提问作者xylar
相关产品推荐
相关产品推荐

