如何实现带www与不带www域名的站点重定向配置

在网站运营过程中,域名重定向是确保用户体验和SEO优化的关键环节。当用户访问带www的域名(如www.example.com)或不带www的顶级域名(如example.com)时,若未统一跳转,可能导致搜索引擎重复收录、用户访问路径混乱等问题。本文将系统讲解如何通过DNS配置与服务器规则实现两类域名的自动重定向,覆盖从基础配置到高级优化的完整流程。

一、DNS记录配置:建立域名解析基础

域名解析是重定向实现的前提,需在DNS管理平台完成两类记录的创建。以主流云服务商的DNS控制台为例,操作路径通常为:域名管理→解析设置→添加记录。

  1. 顶级域名(A记录)配置
    在记录类型中选择”A记录”,主机记录填写@(代表顶级域名),记录值填写服务器公网IP地址。此配置使直接访问example.com的用户请求能被正确路由至服务器。

  2. 带www子域名(CNAME记录)配置
    创建CNAME记录,主机记录填写www,记录值指向顶级域名example.com。此步骤为可选操作,若后续计划通过服务器规则统一处理跳转,可跳过此配置;若需直接通过DNS实现部分跳转逻辑,则需完成此设置。

技术要点

  • 记录TTL值建议设置为5分钟,便于快速生效配置变更
  • 避免同时配置A记录与CNAME记录指向不同IP,可能导致解析冲突
  • 配置完成后可通过nslookup example.com命令验证解析结果

二、服务器端重定向规则配置

DNS配置仅完成请求路由,真正的跳转逻辑需在服务器层面实现。根据服务器环境不同,可采用以下方案:

方案1:Web服务器配置(以Nginx为例)

  1. server {
  2. listen 80;
  3. server_name example.com;
  4. return 301 https://www.example.com$request_uri;
  5. }
  6. server {
  7. listen 80;
  8. server_name www.example.com;
  9. # 实际网站配置
  10. location / {
  11. root /var/www/html;
  12. index index.html;
  13. }
  14. }

配置说明

  • 使用301永久重定向提升SEO权重
  • $request_uri变量保留原始请求路径
  • 建议同时配置HTTP到HTTPS的跳转规则

方案2:应用层代码实现(PHP示例)

  1. <?php
  2. $host = $_SERVER['HTTP_HOST'];
  3. $non_www = 'example.com';
  4. $www = 'www.example.com';
  5. if ($host == $non_www) {
  6. header("HTTP/1.1 301 Moved Permanently");
  7. header("Location: https://".$www.$_SERVER['REQUEST_URI']);
  8. exit();
  9. }
  10. ?>

适用场景

  • 无法直接修改服务器配置的共享主机环境
  • 需要复杂跳转逻辑(如根据用户设备类型跳转)
  • 临时性重定向需求(使用302状态码)

方案3:CDN平台规则配置

主流CDN服务商均提供页面规则配置功能,操作路径通常为:域名管理→规则配置→重定向规则。可设置条件匹配规则:

  • Host等于example.com时,重定向至https://www.example.com
  • 选择”精确匹配”或”包含匹配”模式
  • 配置301/302状态码及缓存时间

优势对比
| 方案类型 | 配置复杂度 | 生效速度 | 适用场景 |
|————————|——————|—————|————————————|
| Web服务器配置 | 中等 | 立即 | 自有服务器环境 |
| 应用层代码 | 低 | 立即 | 共享主机环境 |
| CDN规则 | 低 | 5-10分钟 | 已接入CDN的网站 |

三、验证与监控体系搭建

配置完成后需通过多维度验证确保功能正常:

  1. 基础验证工具

    • 浏览器直接访问:检查地址栏是否自动跳转
    • curl -I http://example.com:查看返回的301/302状态码
    • 在线SEO工具:检测是否存在重复内容问题
  2. 高级监控方案

    1. # 使用wget模拟访问并记录重定向链
    2. wget --save-headers --output-document=- http://example.com
    3. # 监控重定向失败率(需日志分析工具支持)
    4. grep "301\|302" /var/log/nginx/access.log | awk '{print $1}' | sort | uniq -c
  3. 常见问题排查

    • 跳转循环:检查服务器配置是否同时存在相互跳转规则
    • HTTPS不生效:确认证书配置覆盖所有域名变体
    • 缓存问题:清除浏览器缓存或使用隐私模式测试
    • CDN缓存:在CDN控制台强制刷新缓存

四、进阶优化建议

  1. 统一协议版本
    建议将所有HTTP请求重定向至HTTPS,配置示例:

    1. server {
    2. listen 80;
    3. server_name example.com www.example.com;
    4. return 301 https://www.example.com$request_uri;
    5. }
  2. 国际化域名(IDN)支持
    对于包含非ASCII字符的域名,需在服务器配置中正确处理Punycode转换。

  3. 性能优化

    • 避免在重定向规则中使用复杂正则表达式
    • 对高频访问路径设置缓存规则
    • 使用HTTP/2协议减少重定向开销
  4. 安全加固

    • 在重定向响应中添加HSTS头:add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
    • 配置CSP策略防止重定向劫持

通过上述系统化配置,可实现带www与不带www域名的无缝跳转,既提升用户体验又符合搜索引擎优化最佳实践。实际实施时建议先在测试环境验证,再逐步推广至生产环境,并通过监控系统持续跟踪重定向成功率与响应时间等关键指标。