1. 核心目标与高级功能
1.1. 核心目标
将 WordPress 网站的 URL 结构从传统的 目录形式,优雅地转变为现代的 子域名形式,并确保对搜索引擎友好。
- 转换前 URL 结构:
https://your-domain.com/[前缀]/[变量]/
- 转换后 URL 结构:
https://[变量].your-domain.com/
1.2. 高级功能 (新方案核心)
本指南将实现一个支持多域名的、可灵活切换的URL策略系统。
- 支持多域名: 可同时为多个主域名(如
aigcsoft.site
,tchepai.com
)启用子域名模式。 - URL 策略开关: 您可以通过一个简单的开关,在以下两种模式间自由切换:
- 主域名模式 (SEO 最佳): 无论用户从哪个域名访问,最终的网址和页面内链接都将强制统一到您指定的“主域名”上,以集中权重。
- 当前域名模式 (灵活展示): 网站会保持用户当前访问的域名,并在该域名下生成所有链接,适用于多品牌独立展示的场景。
2. 准备工作与核心概念
在开始之前,请确保您拥有:
- 您所有相关域名的 DNS 管理权限。
- 您网站服务器(主机)的后台管理权限(如宝塔面板、cPanel 等)。
此方案依赖三大模块协同工作:
- DNS 层: 作为“地址簿”,将您所有域名的子域名请求指向您的服务器。
- Web 服务器层 (Nginx/Apache): 作为“交通指挥”,接收所有请求,并为多个域名配置 SSL 和跨域策略。
- WordPress 应用层 (PHP): 作为“内容引擎”,通过代码智能识别请求、根据开关策略改写链接并执行重定向。
3. 详细配置步骤
第 1 步:为所有域名配置 DNS 泛解析
此为基础。您需要为您计划使用的每一个主域名重复此操作。
- 位置: 每个域名注册商的 DNS 管理面板。
- 操作: 为每个域名添加一条 A 记录。
- 主机记录 (Host / Name):
*
(星号) - 记录类型 (Type):
A
- 记录值 (Value / Points to):
您服务器的 IPv4 地址
- 示例: 为
aigcsoft.site
添加一条*
记录,再为tchepai.com
添加一条*
记录。
- 主机记录 (Host / Name):
第 2 步:配置 Web 服务器 (以宝塔面板为例)
2.1. 添加多域名绑定与多证书配置
- 创建/设置站点:
- 位置: 宝塔面板 -> 网站管理。
- 操作: 创建一个站点,主域名填写
*.your-domain-1.com
。然后进入该站点的“域名管理”,将您其他的通配符域名(如*.your-domain-2.com
)添加进去。
- 配置多张 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 跨域策略 (解决图标/字体加载问题)
此配置一次即可,对所有域名生效。
- 位置: 您站点的 Nginx 或 Apache 配置文件。
- 操作:
- 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>
- Nginx: 在
- 保存并重载服务。
第 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. 最终验证与故障排查
- 清理缓存: 完成修改后,必须清理所有缓存(插件、CDN、服务器、浏览器)。强烈建议使用无痕模式测试。
- 切换开关: 在
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 语法错误。
请妥善保管此份高级指南,它将是您未来进行服务器迁移、主题升级或为新项目实施相同策略时的宝贵财富。