如何强制子域名多站点创建新子站点时使用HTTPS?
强制子域名多站点创建时保留HTTPS协议(无需修改核心源码)
不用去碰ms-functions.php的核心代码,WordPress的钩子系统完全能搞定这个问题,分享几个经过验证的靠谱方案:
方案1:新站点创建后自动更新HTTPS选项
利用wpmu_new_blog钩子,在子站点创建完成后直接修改它的siteurl和home选项为HTTPS协议。把下面的代码添加到你的主题functions.php文件或者自定义功能插件里(更推荐用插件,避免主题更新导致代码丢失):
add_action('wpmu_new_blog', 'force_subsite_https_on_creation', 10, 6); function force_subsite_https_on_creation($blog_id, $user_id, $domain, $path, $site_id, $meta) { switch_to_blog($blog_id); // 更新siteurl和home为HTTPS协议 update_option('siteurl', 'https://' . $domain . $path); update_option('home', 'https://' . $domain . $path); restore_current_blog(); }
这个钩子会在每个新子站点创建后立即触发,自动替换协议为HTTPS,完全绕过核心代码里的限制。
方案2:全局强制HTTPS输出(防止协议回退)
为了避免某些场景下(比如插件修改、手动操作)协议变回HTTP,你可以再加两个过滤器,确保所有site_url和home_url的输出都是HTTPS:
add_filter('site_url', 'force_https_site_url', 10, 4); function force_https_site_url($url, $path, $scheme, $blog_id) { return str_replace('http://', 'https://', $url); } add_filter('home_url', 'force_https_home_url', 10, 4); function force_https_home_url($url, $path, $scheme, $blog_id) { return str_replace('http://', 'https://', $url); }
方案3:确保WordPress检测到HTTPS环境
如果你的站点是在反向代理、CDN或者负载均衡后面运行,WordPress可能无法正确识别HTTPS环境,这时候需要在wp-config.php里添加一行代码,强制让WordPress认为当前是HTTPS连接:
$_SERVER['HTTPS'] = 'on'; // 针对反向代理场景的适配版本: // if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') { // $_SERVER['HTTPS'] = 'on'; // }
这样WordPress在生成URL的时候会默认用HTTPS,从根源上减少协议错误的可能。
这些方法都不需要修改任何核心文件,完全符合WordPress的最佳实践,而且后续更新核心版本也不会影响功能。
内容的提问来源于stack exchange,提问作者wsizoo
相关产品推荐
相关产品推荐

