海外访问:www.kdjingpai.com
Ctrl + D 收藏本站
当前位置:首页 » AI实操教程

WordPress 泛解析子域名 URL 改造高级指南 (支持绑定多域名)

2025-07-28 244

1. 核心目标与高级功能

1.1. 核心目标

将 WordPress 网站的 URL 结构从传统的 目录形式,优雅地转变为现代的 子域名形式,并确保对搜索引擎友好。

  • 转换前 URL 结构https://your-domain.com/[前缀]/[变量]/
  • 转换后 URL 结构https://[变量].your-domain.com/

1.2. 高级功能 (新方案核心)

本指南将实现一个支持多域名的、可灵活切换的URL策略系统。

  • 支持多域名: 可同时为多个主域名(如 aigcsoft.sitetchepai.com)启用子域名模式。
  • URL 策略开关: 您可以通过一个简单的开关,在以下两种模式间自由切换:
    1. 主域名模式 (SEO 最佳): 无论用户从哪个域名访问,最终的网址和页面内链接都将强制统一到您指定的“主域名”上,以集中权重。
    2. 当前域名模式 (灵活展示): 网站会保持用户当前访问的域名,并在该域名下生成所有链接,适用于多品牌独立展示的场景。

2. 准备工作与核心概念

在开始之前,请确保您拥有:

  • 您所有相关域名的 DNS 管理权限。
  • 您网站服务器(主机)的后台管理权限(如宝塔面板、cPanel 等)。

此方案依赖三大模块协同工作:

  • DNS 层: 作为“地址簿”,将您所有域名的子域名请求指向您的服务器。
  • Web 服务器层 (Nginx/Apache): 作为“交通指挥”,接收所有请求,并为多个域名配置 SSL 和跨域策略。
  • WordPress 应用层 (PHP): 作为“内容引擎”,通过代码智能识别请求、根据开关策略改写链接并执行重定向。

3. 详细配置步骤

第 1 步:为所有域名配置 DNS 泛解析

此为基础。您需要为您计划使用的每一个主域名重复此操作。

  1. 位置: 每个域名注册商的 DNS 管理面板。
  2. 操作: 为每个域名添加一条 A 记录
    • 主机记录 (Host / Name)* (星号)
    • 记录类型 (Type)A
    • 记录值 (Value / Points to)您服务器的 IPv4 地址
    • 示例: 为 aigcsoft.site 添加一条 * 记录,再为 tchepai.com 添加一条 * 记录。

第 2 步:配置 Web 服务器 (以宝塔面板为例)

2.1. 添加多域名绑定与多证书配置

  1. 创建/设置站点:
    • 位置: 宝塔面板 -> 网站管理。
    • 操作: 创建一个站点,主域名填写 *.your-domain-1.com。然后进入该站点的“域名管理”,将您其他的通配符域名(如 *.your-domain-2.com)添加进去。
  2. 配置多张 SSL 证书 (关键步骤):
    • 位置: 站点的“设置” -> “SSL” 选项卡。
    • 为第一个域名申请证书:
      • 选择 “Let’s Encrypt”,验证方式选择“DNS验证”。
      • 勾选 your-domain-1.com 和 *.your-domain-1.com,按提示完成 DNS 的 TXT 记录验证并申请。
    • 为第二个域名申请证书:
      • 在 SSL 界面,点击左上角的证书品牌下拉菜单,重新选择“Let’s Encrypt”。
      • 界面会刷新,允许您发起一次新的申请
      • 这次只勾选 your-domain-2.com 和 *.your-domain-2.com,再次按提示完成新域名的 DNS 验证并申请。
      • 对所有域名重复此操作。最终,您的站点会同时部署多张证书,服务器会根据来访域名自动匹配。
    • 强制 HTTPS: 成功部署所有证书后,务必开启“强制 HTTPS”功能。

2.2. 配置 CORS 跨域策略 (解决图标/字体加载问题)
此配置一次即可,对所有域名生效。

  1. 位置: 您站点的 Nginx 或 Apache 配置文件。
  2. 操作:
    • Nginx: 在 server{} 块内添加:
      # --- 为字体文件添加 CORS 跨域许可 ---
      location ~* \.(eot|otf|ttf|woff|woff2)$ {
      add_header 'Access-Control-Allow-Origin' '*' always;
      }
      
    • Apache: 在根目录 .htaccess 文件中添加:
      # --- 为字体文件添加 CORS 跨域许可 ---
      <FilesMatch "\.(eot|otf|ttf|woff|woff2)$">
      Header set Access-Control-Allow-Origin "*"
      </FilesMatch>
      
  3. 保存并重载服务。

第 3 步:修改 WordPress 核心文件

3.1. 修改 wp-config.php 文件 (位于网站根目录)
此文件负责识别所有授权域名的子域名请求。

操作: 在 wp-config.php 文件顶部 (<?php 标签后) 添加以下代码块。

/**
* ===================================================================
*               子域名泛解析配置: 内部请求重写 (多域名支持版)
* ===================================================================
*/
if (isset($_SERVER['HTTP_HOST'])) {
// --- 请在这里修改为您自己的配置 ---
$SUBDOMAIN_CONFIG = [
// 在此列表中添加所有您希望启用此功能的根域名
'allowed_main_domains' => [
'aigcsoft.site',     // 您的第一个域名
'tchepai.com',       // 您的第二个域名
],
// 这是您的固定目录前缀
'url_prefix' => 'tool',
];
// --------------------------------
$current_host = $_SERVER['HTTP_HOST'];
$host_parts = explode('.', $current_host);
if (count($host_parts) >= 3 && $host_parts[0] !== 'www') {
$subdomain = $host_parts[0];
$main_domain_candidate = implode('.', array_slice($host_parts, 1));
if (in_array($main_domain_candidate, $SUBDOMAIN_CONFIG['allowed_main_domains'])) {
$_SERVER['REQUEST_URI'] = '/' . $SUBDOMAIN_CONFIG['url_prefix'] . '/' . $subdomain . '/';
}
}
}

3.2. 修改 functions.php 文件 (位于 wp-content/themes/your-active-theme/)
此文件是 URL 策略控制中心。

操作: 在您主题的 functions.php 文件末尾,添加以下完整的代码块

/**
* ===================================================================
*            子域名泛解析功能包: URL处理 & SEO重定向 (带开关的多域名支持版)
* ===================================================================
*/
// --- 请在这里修改为您自己的配置 ---
$MY_APP_CONFIG = [
// [重要!] 定义您的“官方”主域名。
'canonical_domain' => 'aigcsoft.site',
// 所有授权的域名 (与 wp-config.php 中保持一致)
'allowed_main_domains' => [
'aigcsoft.site',
'tchepai.com',
],
// 您的固定目录前缀
'url_prefix'  => 'tool',
/**
* [总开关] 是否强制使用主域名 (Canonical Domain)
* - 设置为 true:  【SEO 最佳实践】无论用户从哪个域名访问,最终地址和页面内链接都会统一到 'canonical_domain'。
* - 设置为 false: 【灵活展示模式】网址会显示用户当前访问的域名,实现多品牌独立展示。
*/
'force_canonical_domain' => true, // 在这里切换 true 或 false
];
// --------------------------------
// 功能 1: 禁用 WordPress 规范链接重定向 (基石)
remove_filter('template_redirect', 'redirect_canonical');
// 功能 2: 动态重写网站内所有相关链接 (已升级)
function my_theme_rewrite_internal_links($permalink, $post) {
global $MY_APP_CONFIG;
$prefix_to_check = '/' . $MY_APP_CONFIG['url_prefix'] . '/';
if (strpos($permalink, $prefix_to_check) !== false) {
$target_domain = $MY_APP_CONFIG['canonical_domain'];
if (!$MY_APP_CONFIG['force_canonical_domain']) {
$current_main_domain = implode('.', array_slice(explode('.', $_SERVER['HTTP_HOST']), -2));
if (in_array($current_main_domain, $MY_APP_CONFIG['allowed_main_domains'])) {
$target_domain = $current_main_domain;
}
}
return 'https://' . $post->post_name . '.' . $target_domain . '/';
}
return $permalink;
}
add_filter('post_link', 'my_theme_rewrite_internal_links', 20, 2);
add_filter('post_type_link', 'my_theme_rewrite_internal_links', 20, 2);
// 功能 3: 为旧链接 (/prefix/slug/) 设置 301 永久重定向 (已升级)
function my_theme_redirect_old_urls() {
global $MY_APP_CONFIG;
$prefix_to_check = '/' . $MY_APP_CONFIG['url_prefix'] . '/';
if (in_array($_SERVER['HTTP_HOST'], $MY_APP_CONFIG['allowed_main_domains']) && strpos($_SERVER['REQUEST_URI'], $prefix_to_check) === 0) {
$slug = trim(str_replace($prefix_to_check, '', $_SERVER['REQUEST_URI']), '/');
if (!empty($slug)) {
$target_domain = $MY_APP_CONFIG['force_canonical_domain'] ? $MY_APP_CONFIG['canonical_domain'] : $_SERVER['HTTP_HOST'];
wp_redirect('https://' . $slug . '.' . $target_domain . '/', 301);
exit;
}
}
}
add_action('template_redirect', 'my_theme_redirect_old_urls');
// 功能 4: [新增] 当开关开启时,将非主域名访问重定向到主域名
function my_theme_redirect_to_canonical_domain() {
global $MY_APP_CONFIG;
if (!$MY_APP_CONFIG['force_canonical_domain']) return;
$current_host = $_SERVER['HTTP_HOST'];
$host_parts = explode('.', $current_host);
if (count($host_parts) >= 3 && $host_parts[0] !== 'www') {
$subdomain = $host_parts[0];
$current_main_domain = implode('.', array_slice($host_parts, 1));
if (in_array($current_main_domain, $MY_APP_CONFIG['allowed_main_domains']) && $current_main_domain !== $MY_APP_CONFIG['canonical_domain']) {
wp_redirect('https://' . $subdomain . '.' . $MY_APP_CONFIG['canonical_domain'] . '/', 301);
exit;
}
}
}
add_action('template_redirect', 'my_theme_redirect_to_canonical_domain', 5);

4. 最终验证与故障排查

  1. 清理缓存: 完成修改后,必须清理所有缓存(插件、CDN、服务器、浏览器)。强烈建议使用无痕模式测试。
  2. 切换开关: 在 functions.php 中修改 'force_canonical_domain' 的值 (true/false) 来测试不同模式。

4.1. 验证方法:当开关为 true (主域名模式)

  • 测试跳转: 在浏览器地址栏输入 [变量].your-domain-2.com。按回车后,地址栏应立即跳转到 [变量].your-domain-1.com (您的主域名)。
  • 测试链接: 访问任意页面,右键检查所有内部链接,它们的 href 属性必须全部指向您的主域名 (...your-domain-1.com)。

4.2. 验证方法:当开关为 false (当前域名模式)

  • 测试保持: 访问 [变量].your-domain-2.com,地址栏应保持不变
  • 测试链接: 在 [变量].your-domain-2.com 页面上,右键检查所有内部链接,它们的 href 属性应指向当前域名 (...your-domain-2.com)。
  • 交叉测试: 新开标签页访问 [变量].your-domain-1.com,该页面的链接则应指向 ...your-domain-1.com

4.3. 常见问题排查

  • 无限重定向: 确保 remove_filter('template_redirect', 'redirect_canonical'); 存在且未被注释。
  • 证书错误/不安全: 检查第 2.1 步,确保已为所有域名成功申请并部署了独立的 SSL 证书。
  • 图标/字体丢失: 检查第 2.2 步的 CORS 跨域配置。
  • 链接或跳转行为不符合预期: 检查 functions.php 中开关的值是否正确,并彻底清理缓存
  • 网站白屏/500错误: 检查 wp-config.php 或 functions.php 中是否有 PHP 语法错误。

请妥善保管此份高级指南,它将是您未来进行服务器迁移、主题升级或为新项目实施相同策略时的宝贵财富。

相关推荐

找不到AI工具?在这试试!

输入关键词,即可 无障碍访问 必应 搜索,快速找到本站所有 AI 工具。

回顶部

zh_CN简体中文