1. 核心目标
将 WordPress 网站的 URL 结构从传统的目录形式,优雅地转变为现代的子域名形式,并确保对搜索引擎友好。
- 转换前 URL 结构:
https://your-domain.com/[前缀]/[变量]/
- 转换后 URL 结构:
https://[变量].your-domain.com/
关键占位符说明:
your-domain.com
: 您的主域名 (例如:aigcsoft.site
)。[前缀]
: 您用来组织内容的固定目录名 (例如:tool
,app
,showcase
)。[变量]
: 文章或页面的唯一标识符 (Slug) (例如:tiktokalyzer-tool
)。
2. 准备工作与核心概念
在开始之前,请确保您拥有:
- 您网站域名的 DNS 管理权限。
- 您网站服务器(主机)的后台管理权限(如宝塔面板、cPanel、Plesk 等)。
此方案的实现依赖三大模块协同工作:
- DNS 层:作为“地址簿”,将所有子域名指向您的服务器。
- Web 服务器层 (Nginx/Apache):作为“交通指挥”,接收所有请求并处理跨域等策略。
- WordPress 应用层 (PHP):作为“内容引擎”,智能识别请求、改写链接并执行重定向。
3. 详细配置步骤
第 1 步:配置 DNS 泛解析
此为基础,让任意子域名都能找到您的服务器。
- 位置:您的域名注册商的 DNS 管理面板。
- 操作:添加一条 A 记录。
- 主机记录 (Host / Name):
*
(星号) - 记录类型 (Type):
A
- 记录值 (Value / Points to):
您服务器的 IPv4 地址
- TTL:使用默认值。
- 主机记录 (Host / Name):
第 2 步:配置 Web 服务器
2.1. 添加泛解析站点并配置 SSL
- 位置:宝塔面板或其他主机管理面板 -> 网站管理。
- 操作:
- 添加站点:在“域名”栏输入
*.your-domain.com
,创建站点。 - 申请 SSL 证书:为该站点申请一个通配符证书。使用 Let’s Encrypt 时,请务必同时验证
*.your-domain.com
和your-domain.com
。 - 强制 HTTPS:成功部署证书后,开启“强制 HTTPS”功能。
- 添加站点:在“域名”栏输入
2.2. 配置 CORS 跨域策略 (解决图标/字体加载问题)
当 [变量].your-domain.com
页面需要加载 your-domain.com
上的字体或图标文件时,此配置为必需。
- 位置:您主网站 (
your-domain.com
) 的站点配置文件。 - 操作:
- 对于 Nginx 用户:
在主站的 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
标签后,添加以下代码块。请务必根据注释修改为您自己的域名和前缀!
/**
* ===================================================================
* 子域名泛解析配置: 内部请求重写
* ===================================================================
* 作用:当服务器接收到子域名请求时 (例如: a.b.com), 在 WordPress 内部
* 将其解析为对特定目录的访问 (例如: /prefix/a/),而浏览器地址
* 栏的 URL 保持子域名不变。
*/
if (isset($_SERVER['HTTP_HOST'])) {
// --- 请在这里修改为您自己的配置 ---
$main_domain_parts = ['your-domain-part-1', 'your-domain-part-2']; // 例如: ['aigcsoft', 'site']
$url_prefix = 'tool'; // 这是您的固定目录前缀, 例如: 'tool', 'app' 等。
// --------------------------------
$host_parts = explode('.', $_SERVER['HTTP_HOST']);
// 判断条件:域名由3部分组成, 且不是www, 且主域名匹配
if (count($host_parts) === 3 && $host_parts[0] !== 'www' && $host_parts[1] === $main_domain_parts[0] && $host_parts[2] === $main_domain_parts[1]) {
$subdomain = $host_parts[0];
// 将请求 URI 重写为/前缀/目录下的对应页面
$_SERVER['REQUEST_URI'] = '/' . $url_prefix . '/' . $subdomain . '/';
}
}
3.2. 修改 functions.php
文件 (位于 wp-content/themes/your-active-theme/
)
此文件负责三项关键任务:防止重定向循环、动态改写链接、处理旧链接的301跳转。
操作:在您当前使用主题的 functions.php
文件末尾,添加以下完整的代码块。同样,请根据注释修改为您自己的域名和前缀!
/**
* ===================================================================
* 子域名泛解析功能包: URL处理 & SEO重定向
* ===================================================================
*/
// --- 请在这里修改为您自己的配置 ---
$MY_APP_CONFIG = [
'main_domain' => 'your-domain.com', // 您的主域名, 例如: 'aigcsoft.site'
'url_prefix' => 'tool', // 您在 wp-config.php 中设置的相同前缀, 例如: 'tool'
];
// --------------------------------
/**
* 功能 1: 禁用 WordPress 规范链接重定向
* 作用:这是整个方案的基石。防止 WordPress 将子域名请求自动301跳转回
* 带目录的 URL,从而避免无限重定向循环。
*/
remove_filter('template_redirect', 'redirect_canonical');
/**
* 功能 2: 动态重写网站内所有相关链接
* 作用:在页面生成时,自动将 /prefix/slug/ 格式的链接替换为 slug.domain.com
* 的子域名格式,实现完美的伪静态效果。
*/
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) {
$subdomain = $post->post_name; // 获取文章的 slug
return 'https://' . $subdomain . '.' . $MY_APP_CONFIG['main_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: 为旧链接设置 301 永久重定向
* 作用:当用户或搜索引擎直接访问旧的 /prefix/slug/ 格式的 URL 时,
* 自动执行一个 SEO 友好的 301 重定向,跳转到新的子域名地址。
*/
function my_theme_redirect_old_urls() {
global $MY_APP_CONFIG;
$domain_to_check = $MY_APP_CONFIG['main_domain'];
$prefix_to_check = '/' . $MY_APP_CONFIG['url_prefix'] . '/';
// 仅当访问的是主域名,且URL路径包含指定前缀时才执行
if ( $domain_to_check == $_SERVER['HTTP_HOST'] && strpos($_SERVER['REQUEST_URI'], $prefix_to_check) === 0 ) {
$slug = trim(str_replace($prefix_to_check, '', $_SERVER['REQUEST_URI']), '/');
if (!empty($slug)) {
$new_url = 'https://' . $slug . '.' . $domain_to_check . '/';
wp_redirect($new_url, 301); // 执行301永久重定向
exit;
}
}
}
add_action('template_redirect', 'my_theme_redirect_old_urls');
4. 最终验证与故障排查
- 清理缓存:完成所有修改后,必须清理 WordPress 插件缓存(如 WP Rocket)、CDN 缓存(如有)和浏览器缓存。强烈建议使用无痕模式进行测试。
- 验证链接:访问您的网站首页,右键检查任意一个工具/文章的链接,看其
href
属性是否已变为https://[变量].your-domain.com/
格式。 - 验证重定向:在浏览器地址栏手动输入一个旧地址,如
https://your-domain.com/[前缀]/[变量]/
,按回车后,观察地址栏是否瞬间跳转到新的子域名地址。 - 验证子域名:直接访问一个子域名地址,看页面是否显示正常,且所有图标、样式都加载无误。
常见问题排查:
- 无限重定向 (ERR_TOO_MANY_REDIRECTS):检查
functions.php
中是否已添加remove_filter('template_redirect', 'redirect_canonical');
。 - 图标/字体显示为方框或X:检查第 2.2 步的 CORS 跨域配置是否已正确添加并生效。
- 链接未改变:检查
functions.php
中$MY_APP_CONFIG
里的域名和前缀是否与您网站的实际情况完全一致。 - 网站白屏或500错误:检查
wp-config.php
或functions.php
中是否有 PHP 语法错误(通常是复制粘贴时出错)。
请妥善保管此份文档,它将是您未来进行服务器迁移、主题升级或为新项目实施相同策略时的宝贵财富。