推荐用virtualhost+redirect permanent指令实现,无需mod_rewrite;若用.htaccess则需启用rewriteengine和allowoverride all,并配置rewritecond与rewriterule保留路径。

直接用 Apache 配置 301 跳转,把不带 www 的域名(比如 example.com)统一跳到带 www 的版本(比如 www.example.com),核心是让所有访问 example.com 的请求都返回 HTTP 状态码 301,并重定向到对应路径的 www.example.com 地址。
推荐方式:VirtualHost + RedirectMatch(最简洁可靠)
编辑站点配置文件(如 /etc/apache2/sites-available/000-default.conf),添加两个独立的 <virtualhost></virtualhost> 块:
- 第一个块匹配不带 www 的域名,只做跳转:
<virtualhost><br> ServerName example.com<br> Redirect permanent / http://www.example.com/<br></virtualhost>
- 第二个块处理带 www 的正常服务:
<virtualhost><br> ServerName www.example.com<br> DocumentRoot /var/www/html<br> # 其他常规配置(Directory、SSL 等)<br></virtualhost>
✅ 优点:无需启用 mod_rewrite,语义清晰,Apache 原生支持,兼容性好,不易出错。HTTPS 站点需在 <virtualhost></virtualhost> 中同样配置,或把目标 URL 改为 https://www.example.com/。
Apache 2.4.62 官方 tar.gz 源码包是 Linux 及类 Unix 系统构建 Web 服务器的核心基础。通过源码编译安装,开发者能够灵活定制模块、优化性能并精准控制安装路径,满足多样化的业务需求。
备选方式:.htaccess(适合共享主机或无权限改主配置)
确保服务器已启用 mod_rewrite,且对应目录的主配置中设置了 AllowOverride All。在网站根目录新建或编辑 .htaccess,写入:
RewriteEngine OnRewriteCond %{HTTP_HOST} ^example\.com$ [NC]RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]
⚠ 注意:若站点启用了 HTTPS,目标 URL 必须用 https://;若同时想把 www.example.com 也跳过去,条件要改成 ^(www\.)?example\.com$;若只跳不带 www 的,保留原条件即可。
关键验证步骤
- 重启 Apache:
sudo systemctl restart apache2(Debian/Ubuntu)或sudo apachectl graceful(通用) - 用浏览器访问
example.com/some-page,确认地址栏跳转且路径完整保留 - 打开 Chrome 开发者工具 → Network 标签页,刷新页面,查看响应状态码是否为
301 Moved Permanently - 用在线工具(如 httpstatus.io)检测原始 URL,确认响应头含
HTTP/1.1 301 Moved Permanently
常见坑点提醒
- 别用 DNS 的 CNAME 或 A 记录“假装”实现跳转——DNS 层无法返回 HTTP 状态码,不算真正 301,对 SEO 无效
- 避免循环跳转:检查
www.example.com的配置里不能反向跳回example.com - WordPress 用户注意:后台「设置 → 常规」里的「WordPress 地址(URL)」和「站点地址(URL)」必须设为带 www 的最终目标域名,否则可能引发重定向冲突
- 如果跳转后样式丢失或资源 404,请检查静态资源链接是否写死为不带 www 的域名,应改为相对路径或协议相对 URL










