如何将wildcard subdomain永久重定向到www并保留URL其余部分
解决泛域名重定向到www并保留路径的.htaccess配置方案
嘿,我太懂你折腾.htaccess正则时的崩溃感了——泛域名重定向看着简单,但稍不留神就会出循环重定向、丢路径的问题。别慌,给你一套经过实战验证的配置,一步步来搞定:
核心配置代码
先把这段代码放到你网站根目录的.htaccess文件最顶部(避免和其他规则冲突),记得把example.com换成你自己的主域名:
# 开启Rewrite引擎 RewriteEngine On # 1. 排除www本身,防止循环重定向 RewriteCond %{HTTP_HOST} !^www\. [NC] # 2. 匹配所有属于你的泛域名(替换成自己的主域名) RewriteCond %{HTTP_HOST} ^(.+)\.example\.com$ [NC] # 3. 永久重定向到www域名,同时保留完整路径 RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]
代码逐行解释
RewriteEngine On:开启Apache的URL重写模块,这是所有规则的基础,必须放在最前面。RewriteCond %{HTTP_HOST} !^www\. [NC]:!^www\.表示匹配不是以www.开头的域名,NC是不区分大小写(比如Www.example.com也能被匹配到),这一步是为了避免www域名自己重定向自己,造成循环。RewriteCond %{HTTP_HOST} ^(.+)\.example\.com$ [NC]:精准匹配所有你的泛域名(比如blog.example.com、shop.example.com),确保不会误重定向其他无关域名。RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]:^(.*)$捕获域名后面的所有路径内容(比如/article/123);https://www.example.com/$1把捕获到的路径拼接到www域名后面;R=301表示永久重定向(符合你保留旧链接SEO权重的需求);L表示这是最后一条规则,匹配到后就停止执行后续规则。
额外优化:同时跳转到HTTPS
如果你的网站已经启用HTTPS,建议把HTTP请求也一并重定向到HTTPS,只需要在上面的规则前加一段:
# 先把所有HTTP请求重定向到HTTPS RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
测试小技巧
- 测试阶段建议把
R=301改成R=302(临时重定向),因为301会被浏览器强制缓存,万一配置错了,清理缓存会很麻烦;确认所有重定向都正常后,再改回301。 - 可以用浏览器开发者工具的“网络”面板,查看重定向状态码是否是301,路径是否完整保留。
常见问题排查
- 循环重定向:检查是不是
!^www\.的写法有误,有没有漏掉反斜杠;或者你的www域名解析有问题,导致服务器识别不到www前缀。 - 路径丢失:确认
RewriteRule里的$1没有写错,^(.*)$要完整捕获所有路径内容。 - 规则不生效:检查服务器是否开启了
mod_rewrite模块,同时确保网站根目录的Apache配置里AllowOverride All已经设置(否则.htaccess会被忽略)。
内容的提问来源于stack exchange,提问作者Mirjana Katalina
相关产品推荐
相关产品推荐

