如何通过.htaccess将WordPress指定页面/栏目重写映射到子域名
问题核心原因
- 仅添加A记录无效:SiteGround需要在站点管理后台将
new.domain.com的文档根目录绑定到主站的根目录(即存放wp-config.php的目录,默认是public_html),否则服务器无法识别子域名对应的站点资源,会返回找不到服务器错误。 - 原规则缺失内部重写逻辑:你之前写的只有跳转规则,没有处理子域名访问时内部映射到
/new目录的逻辑,就算子域名绑定正确也会出现404。
配置步骤
1. SiteGround子域名绑定
登录SiteGround的Site Tools面板,进入Domain > Subdomains,新增子域名new.domain.com,将其**Root Path(根路径)**设置为主站的根目录,不要使用默认生成的public_html/new路径。
2. .htaccess规则配置
将以下规则放在.htaccess文件的最顶部,放在WordPress默认的重写规则之前,替换domain.com为你自己的实际域名:
# 1. 旧路径自动跳转到子域名(解决需求3) RewriteCond %{HTTP_HOST} ^(www\.)?domain\.com$ [NC] RewriteCond %{REQUEST_URI} ^/new(/.*)?$ [NC] RewriteRule ^new/(.*)$ https://new.domain.com/$1 [R=301,L] # 2. 子域名内部映射到/new目录(解决需求1、2,地址栏不变无跳转) RewriteCond %{HTTP_HOST} ^new\.domain\.com$ [NC] RewriteCond %{REQUEST_URI} !^/new/ [NC] RewriteRule ^(.*)$ /new/$1 [L]
3. WordPress适配(可选,更稳定)
如果不想频繁调整重写规则,或者出现链接生成异常,可以将以下代码添加到当前主题的functions.php文件末尾,替换domain.com为实际域名:
// 替换/new栏目及其子页的输出链接为子域名格式 add_filter('post_link', 'custom_new_permalink', 10, 2); add_filter('page_link', 'custom_new_permalink', 10, 2); function custom_new_permalink($permalink, $post) { $new_page_id = get_page_by_path('new')->ID; $is_new_section = ($post->ID == $new_page_id) || (wp_get_post_parent_id($post->ID) == $new_page_id); if ($is_new_section || strpos($permalink, 'domain.com/new/') !== false) { $permalink = str_replace('domain.com/new', 'new.domain.com', $permalink); } return $permalink; } // 修正子域名下的请求解析,避免404 add_action('init', 'custom_new_parse_request'); function custom_new_parse_request() { if ($_SERVER['HTTP_HOST'] == 'new.domain.com') { $_SERVER['REQUEST_URI'] = '/new' . $_SERVER['REQUEST_URI']; } }
验证操作
配置完成后依次清理:SiteGround服务器缓存、WordPress站点缓存、浏览器本地缓存,再测试三个需求是否全部生效。
内容的提问来源于stack exchange,提问作者Ben
相关产品推荐
相关产品推荐

