WordPress 多域名绑定完全指南

本文介绍了WordPress多域名绑定的应用场景,包括品牌保护、市场推广、移动端适配、多语言站点和新旧域名切换。详细说明了域名解析和服务器配置的准备工作,并提供了五种实现方法:修改WordPress设置、使用.htaccess文件重定向、配置Nginx、开启多站点功能以及通过代码动态处理,帮助用户根据需求灵活绑定多个域名。

WordPress基础教程
阅读时间: 114 分钟
最后更新时间:2026年3月12日

一、多域名绑定的应用场景

在 WordPress 站点运营中,多域名绑定是常见需求,主要应用场景包括:

  1. 品牌保护:注册不同后缀的域名,防止品牌被抢注
  2. 市场推广:不同地区使用不同域名
  3. 移动端适配:m.xxx.com 用于移动端
  4. 多语言站点:en.domain.com, cn.domain.com
  5. 新旧域名切换:平滑过渡期

二、准备工作

1. 域名解析设置

在所有需要绑定的域名DNS中,将A记录指向您的服务器IP地址。

主域名.com    A记录  服务器IP
www.主域名.com  A记录  服务器IP
二级域名.com    A记录  服务器IP
别名域名.com    A记录  服务器IP

2. 服务器配置检查

确保服务器(Apache/Nginx)支持多域名配置。

三、方法一:通过 WordPress 设置(最简单)

1. 修改 wp-config.php

// 在 wp-config.php 中添加
define('WP_SITEURL', 'https://' . $_SERVER['HTTP_HOST']);
define('WP_HOME', 'https://' . $_SERVER['HTTP_HOST']);

2. 修改数据库中的站点地址

wp_options表中修改:

  • siteurlhttps://主域名.com
  • homehttps://主域名.com

3. 使用插件自动处理

安装并激活 “WordPress MU Domain Mapping”​ 插件,适合多站点。

四、方法二:通过 .htaccess 文件重定向(Apache)

1. 强制使用主域名

# 强制所有域名重定向到主域名
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(www\.)?其他域名\.com$ [NC]
RewriteRule ^(.*)$ https://主域名.com/$1 [R=301,L]

2. 多域名共存,不重定向

# 允许所有配置的域名访问
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(www\.)?(主域名\.com|其他域名\.com|二级域名\.com)$ [NC]
RewriteRule ^ - [L]

3. 根据不同域名显示不同内容

# 根据域名设置不同的环境变量
RewriteCond %{HTTP_HOST} ^mobile\.domain\.com$ [NC]
RewriteRule ^ - [E=SITE_VERSION:mobile]

RewriteCond %{HTTP_HOST} ^desktop\.domain\.com$ [NC]
RewriteRule ^ - [E=SITE_VERSION:desktop]

五、方法三:通过 Nginx 配置

1. 基本多域名配置

server {
    listen 80;
    server_name 主域名.com www.主域名.com 其他域名.com www.其他域名.com;
    
    root /var/www/wordpress;
    index index.php;
    
    location / {
        try_files $uri $uri/ /index.php?$args;
    }
    
    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}

2. 301重定向到主域名

server {
    listen 80;
    server_name 其他域名.com www.其他域名.com;
    
    return 301 https://主域名.com$request_uri;
}

六、方法四:通过 WordPress 多站点(Multisite)

1. 开启多站点功能

wp-config.php中添加:

define('WP_ALLOW_MULTISITE', true);

2. 安装后访问 工具 → 网络设置

选择子域名或子目录安装。

3. 配置网络设置

生成的 .htaccess内容:

RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]

# add a trailing slash to /wp-admin
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L]
RewriteRule . index.php [L]

4. 安装域映射插件

  1. 安装 “WordPress MU Domain Mapping”​ 插件
  2. wp-config.php中添加:
define('SUNRISE', 'on');
  1. wp-content/sunrise.php中添加(如果没有则创建):
<?php
// 域映射功能

七、方法五:通过代码动态处理

1. 在主题 functions.php 中处理

/**
 * 多域名支持
 */
add_action('init', 'handle_multiple_domains');

function handle_multiple_domains() {
    $current_domain = $_SERVER['HTTP_HOST'];
    $primary_domain = '主域名.com';
    
    // 允许访问的域名列表
    $allowed_domains = array(
        '主域名.com',
        'www.主域名.com',
        '其他域名.com',
        'www.其他域名.com',
        '二级域名.com',
    );
    
    // 如果不是允许的域名,重定向到主域名
    if (!in_array($current_domain, $allowed_domains) && !defined('WP_CLI')) {
        wp_redirect('https://' . $primary_domain . $_SERVER['REQUEST_URI'], 301);
        exit;
    }
    
    // 动态设置站点URL
    if (!is_admin()) {
        add_filter('site_url', 'dynamic_site_url', 10, 4);
        add_filter('home_url', 'dynamic_home_url', 10, 4);
    }
}

function dynamic_site_url($url, $path, $scheme, $blog_id) {
    return dynamic_domain_replace($url);
}

function dynamic_home_url($url, $path, $scheme, $blog_id) {
    return dynamic_domain_replace($url);
}

function dynamic_domain_replace($url) {
    $primary_domain = '主域名.com';
    $current_domain = $_SERVER['HTTP_HOST'];
    
    // 如果不是主域名,替换为当前访问域名
    if ($current_domain !== $primary_domain && strpos($url, $primary_domain) !== false) {
        $url = str_replace($primary_domain, $current_domain, $url);
    }
    
    return $url;
}

2. 根据域名加载不同内容

/**
 * 根据域名显示不同内容
 */
add_action('template_redirect', 'domain_specific_content');

function domain_specific_content() {
    $current_domain = $_SERVER['HTTP_HOST'];
    
    switch ($current_domain) {
        case 'shop.domain.com':
            // 商城版本
            add_filter('theme_mods', 'shop_theme_mods');
            break;
            
        case 'blog.domain.com':
            // 博客版本
            add_filter('pre_option_blogname', function() {
                return '专业博客 - 域名B';
            });
            break;
            
        case 'mobile.domain.com':
            // 移动端版本
            add_filter('stylesheet', function() {
                return 'mobile-theme';
            });
            break;
    }
}

八、方法六:通过插件实现

1. 推荐插件

  • Multisite Domain Mapping​ – 多站点域映射
  • WP Multisite Domain Mapping​ – 专业域映射
  • Domain Mapping System​ – 商业解决方案
  • Multiple Domains​ – 简单多域名

2. Multiple Domains 插件示例

// 插件配置示例
$domains = array(
    'primary-domain.com',
    'secondary-domain.com',
    'tertiary-domain.com',
);

// 自动检测并应用对应设置
foreach ($domains as $domain) {
    if ($_SERVER['HTTP_HOST'] === $domain) {
        define('DOMAIN_CURRENT_SITE', $domain);
        break;
    }
}

九、SEO 优化处理

1. 规范链接设置

// 在 header.php 中添加
<link rel="canonical" href="<?php 
    $canonical_url = 'https://主域名.com';
    if (is_single() || is_page()) {
        $canonical_url .= $_SERVER['REQUEST_URI'];
    } else if (is_category() || is_tag()) {
        $canonical_url .= '/category/' . get_queried_object()->slug;
    }
    echo esc_url($canonical_url);
?>" />

2. 多域名 SEO 插件配置

// 使用 Yoast SEO 多域名支持
add_filter('wpseo_canonical', 'multi_domain_canonical');
add_filter('wpseo_opengraph_url', 'multi_domain_og_url');

function multi_domain_canonical($canonical) {
    $primary_domain = '主域名.com';
    $current_domain = $_SERVER['HTTP_HOST'];
    
    if (strpos($canonical, $primary_domain) !== false) {
        $canonical = str_replace($primary_domain, $current_domain, $canonical);
    }
    
    return $canonical;
}

十、SSL/HTTPS 配置

1. 多域名 SSL 证书

  • 使用通配符证书:*.domain.com
  • 使用多域名证书(SAN证书)
  • Let’s Encrypt 免费多域名证书

2. 强制 HTTPS

// 在 wp-config.php 中
define('FORCE_SSL_ADMIN', true);
define('FORCE_SSL_LOGIN', true);

// 在 .htaccess 中
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

十一、缓存和 CDN 配置

1. 多域名缓存配置

// 根据域名设置不同的缓存键
add_filter('rocket_cache_query_strings', 'multi_domain_cache_keys');

function multi_domain_cache_keys($query_strings) {
    $domain = $_SERVER['HTTP_HOST'];
    $query_strings[] = 'domain=' . md5($domain);
    return $query_strings;
}

2. Cloudflare 多域名设置

# 在 .htaccess 中处理 Cloudflare
<IfModule mod_cloudflare.c>
    # 允许多域名
    Cloudflare_Enable on
</IfModule>

十二、数据库处理

1. 序列化数据修复

// 替换数据库中的域名
function replace_domain_in_database($old_domain, $new_domain) {
    global $wpdb;
    
    $tables = array(
        $wpdb->posts,
        $wpdb->postmeta,
        $wpdb->options,
        $wpdb->comments,
        $wpdb->commentmeta,
    );
    
    foreach ($tables as $table) {
        $wpdb->query(
            $wpdb->prepare(
                "UPDATE {$table} 
                SET option_value = REPLACE(option_value, %s, %s) 
                WHERE option_value LIKE %s",
                $old_domain,
                $new_domain,
                '%' . $wpdb->esc_like($old_domain) . '%'
            )
        );
    }
}

2. 使用 Search & Replace 插件

推荐使用 “Better Search Replace” 插件安全替换域名。

十三、完整示例配置

完整的 wp-config.php 配置

<?php
// 多域名支持配置
$current_domain = $_SERVER['HTTP_HOST'];

// 允许的域名列表
$allowed_domains = array(
    'primary.com',
    'www.primary.com',
    'secondary.com',
    'www.secondary.com',
    'cn.primary.com',
    'en.primary.com',
);

// 主域名
define('PRIMARY_DOMAIN', 'primary.com');

// 如果是未授权的域名,重定向到主域名
if (!in_array($current_domain, $allowed_domains) && !defined('WP_CLI')) {
    header('Location: https://' . PRIMARY_DOMAIN . $_SERVER['REQUEST_URI'], true, 301);
    exit;
}

// 动态设置 WordPress 地址
define('WP_SITEURL', 'https://' . $current_domain);
define('WP_HOME', 'https://' . $current_domain);

// Cookie 域名设置
define('COOKIE_DOMAIN', $current_domain);

// 标准 WordPress 配置
define('DB_NAME', 'database_name');
define('DB_USER', 'database_user');
define('DB_PASSWORD', 'database_password');
define('DB_HOST', 'localhost');
define('DB_CHARSET', 'utf8mb4');
define('DB_COLLATE', '');

// 安全密钥
// ... 其他标准配置

完整的 .htaccess 配置

# BEGIN WordPress
RewriteEngine On
RewriteBase /

# 允许的域名
RewriteCond %{HTTP_HOST} ^(www\.)?primary\.com$ [NC,OR]
RewriteCond %{HTTP_HOST} ^(www\.)?secondary\.com$ [NC,OR]
RewriteCond %{HTTP_HOST} ^(www\.)?tertiary\.com$ [NC]
RewriteRule ^ - [L]

# 其他域名重定向到主域名
RewriteCond %{HTTP_HOST} !^(www\.)?primary\.com$ [NC]
RewriteCond %{HTTP_HOST} !^(www\.)?secondary\.com$ [NC]
RewriteCond %{HTTP_HOST} !^(www\.)?tertiary\.com$ [NC]
RewriteRule ^(.*)$ https://primary.com/$1 [R=301,L]

# 强制 HTTPS
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

# WordPress 标准重写规则
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

# END WordPress

十四、测试和验证

1. 测试步骤

  1. DNS 解析测试ping 域名.com
  2. SSL 证书测试:https://www.ssllabs.com/ssltest/
  3. 重定向测试:访问各域名检查是否正确跳转
  4. 链接测试:检查站内链接是否正常
  5. SEO 测试:检查规范链接和 meta 标签

2. 验证脚本

<?php
// 验证多域名配置
$domains_to_test = array(
    'https://primary.com',
    'https://www.primary.com',
    'https://secondary.com',
    'https://www.secondary.com',
);

foreach ($domains_to_test as $domain) {
    $ch = curl_init($domain);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    
    $response = curl_exec($ch);
    $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    
    echo "域名: {$domain} - 状态码: {$http_code}";
    
    if (strpos($response, '主站点标题') !== false) {
        echo " - 内容正确\n";
    } else {
        echo " - 内容异常\n";
    }
    
    curl_close($ch);
}

十五、常见问题解决

1. 混合内容警告

// 在 functions.php 中修复混合内容
add_action('template_redirect', 'force_ssl_for_all');

function force_ssl_for_all() {
    if (!is_ssl()) {
        wp_redirect('https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 301);
        exit();
    }
}

2. 登录问题

// 修复多域名登录问题
add_filter('auth_cookie', 'multi_domain_auth_cookie', 10, 3);

function multi_domain_auth_cookie($cookie, $user_id, $remember) {
    $domain = $_SERVER['HTTP_HOST'];
    $cookie['domain'] = $domain;
    return $cookie;
}

3. 缓存问题

// 清除多域名缓存
add_action('save_post', 'clear_multi_domain_cache');

function clear_multi_domain_cache($post_id) {
    $domains = array('domain1.com', 'domain2.com', 'domain3.com');
    
    foreach ($domains as $domain) {
        // 清除各域名缓存
        wp_remote_get("https://{$domain}/wp-json/wp/v2/posts/{$post_id}");
    }
}

十六、最佳实践建议

  1. 选择一个主域名:用于搜索引擎收录
  2. 301重定向:其他域名301到主域名
  3. 统一内容:所有域名显示相同内容
  4. SSL证书:为所有域名配置SSL
  5. 定期检查:定期验证所有域名可访问性
  6. 监控设置:设置域名过期监控
  7. 备份配置:备份多域名相关配置

总结

WordPress 多域名绑定有多种实现方式,从简单的 .htaccess重定向到复杂的多站点配置,您可以根据实际需求选择合适的方法。对于大多数用户,推荐使用方法一(修改 wp-config.php)结合重定向规则,这样既简单又有效。对于企业级应用,考虑使用多站点配合域映射插件。

无论选择哪种方法,都要注意SEO优化、SSL配置和缓存处理,确保多域名配置不会影响网站性能和搜索引擎排名。

这篇文章有用吗?

点击星号为它评分!

平均评分 0 / 5. 投票数: 0

到目前为止还没有投票!成为第一位评论此文章。

在AI里面继续讨论:

曾凤祥

曾凤祥

WordPress技术负责人
小兽WordPress凭借15年的WordPress企业网站开发经验,坚持以“为企业而生的WordPress服务”为宗旨,累计为10万多家客户提供高品质WordPress建站服务,得到了客户的一致好评。我们一直用心对待每一个客户,我们坚信:“善待客户,将会成为终身客户”。小兽WordPress能坚持多年,是因为我们一直诚信。

相关文章

如何让线上业务更上一层楼

还没有WordPress网站

还没有WordPress网站

不管你从事什么行业,WordPress都会为你提供一个专业的主题模板。在WordPress市场上有成千上万的免费主题,适合很多中小企业。

查看所有模板
已经有WordPress网站

已经有WordPress网站

小兽WordPress诚邀你一起学习WordPress,愿与各方携手升级改善您的WordPress网站,一起交流网站加速,网站优化等问题。

马上交个朋友
微信联系
chat 扫码联系
模板建站
挑选模板
网站定制
免费诊断
咨询热线
咨询热线

189-0733-7671

返回顶部