能否在WordPress中基于子域名配置rewrite_rule重写规则?
当然可以!在WordPress中基于子域名创建rewrite_rule规则完全能实现你要的需求——让不同子域名下的相同路径映射到不同页面ID。我来给你详细拆解实现步骤:
第一步:注册自定义Rewrite规则与查询变量
首先,我们需要通过init钩子添加rewrite规则,同时处理子域名到页面ID的映射逻辑。把下面的代码添加到你的主题functions.php文件或者自定义插件中:
function custom_subdomain_page_rewrite() { // 添加rewrite规则:匹配 /page/cat/ 路径 add_rewrite_rule( '^page/cat/?$', 'index.php?page_id=' . get_subdomain_mapped_page_id(), 'top' // 设置为top确保规则优先被匹配 ); } add_action('init', 'custom_subdomain_page_rewrite');
第二步:编写子域名到页面ID的映射逻辑
接下来,我们需要一个函数来根据当前请求的子域名,返回对应的页面ID:
function get_subdomain_mapped_page_id() { // 获取当前请求的主机名 $host = $_SERVER['HTTP_HOST']; // 拆分主机名提取子域名(比如从se.domain.eu中得到se) $domain_parts = explode('.', $host); $subdomain = $domain_parts[0]; // 定义子域名与页面ID的映射关系 $subdomain_page_map = [ 'se' => 1, 'dk' => 2, // 这里可以随时添加更多子域名的映射规则 ]; // 返回匹配到的页面ID,默认返回0对应404页面 return isset($subdomain_page_map[$subdomain]) ? $subdomain_page_map[$subdomain] : 0; }
第三步:刷新Rewrite规则
添加代码后,必须刷新WordPress的rewrite规则才能让新规则生效:
- 登录WordPress后台,进入「设置」→「固定链接」
- 不需要修改任何设置,直接点击「保存更改」按钮即可
关键注意事项
- 子域名解析:确保你的子域名(se.domain.eu、dk.domain.eu)已经正确解析到WordPress所在的服务器IP
- 调试技巧:如果规则不生效,可以开启WP_DEBUG模式,或者在模板中用
var_dump(get_query_var('page_id'))输出当前的页面ID,确认是否正确匹配 - 灵活扩展:如果你的子域名格式更复杂(比如多段子域名),可以调整
$domain_parts的提取逻辑,比如取倒数第三个部分(针对类似xxx.se.domain.eu的情况)
这样设置后,当用户访问se.domain.eu/page/cat/时,就会加载页面ID为1的内容;访问dk.domain.eu/page/cat/时则加载页面ID为2的内容。
内容的提问来源于stack exchange,提问作者Jonas Sturebrand
相关产品推荐
相关产品推荐

