当有多个域名想要绑定的同一个WordPress上时,可在根目录的wp-config.php
中添加以下两行:
define('WP_SITEURL', (isset($_SERVER['HTTPS'])?'https://':'http://').$_SERVER['HTTP_HOST']);
define('WP_HOME', (isset($_SERVER['HTTPS'])?'https://':'http://').$_SERVER['HTTP_HOST']);
注意:需放在 require_once(ABSPATH . 'wp-settings.php'); 之前。
不过,如果通过反向代理访问时,根据
$_SERVER['HTTPS']
判断就会出问题。例如,原始博客地址是http://abc.com,用https://def.com反向代理原始博客,那么通过https://def.com访问时,
$_SERVER['HTTPS']
是未设置值的(unset);此时可通过
$_SERVER['HTTP_X_FORWARDED_PROTO']
来判断。
$_SERVER['HTTPS'] = isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && strtolower($_SERVER['HTTP_X_FORWARDED_PROTO']) == 'https' ? 'on' : 'off';
define('WP_SITEURL', ($_SERVER['HTTPS'] == 'on' ? 'https://' : 'http://').$_SERVER['HTTP_HOST']);
define('WP_HOME', ($_SERVER['HTTPS'] == 'on' ? 'https://' : 'http://').$_SERVER['HTTP_HOST']);
注意:同样需放在 require_once(ABSPATH . 'wp-settings.php'); 之前。
使用Cloudflare代理加速时,这个问题复杂一些,如果Crypto中SSL设置为Full,则用上面方法通过
$_SERVER['HTTP_X_FORWARDED_PROTO']
判断即可;但是,如果SSL设置为Flexible时,
$_SERVER['HTTP_X_FORWARDED_PROTO']
的值可能为http而不是https,此时要通过
$_SERVER['HTTP_CF_VISITOR']
判断,其值为
{"scheme":"https"}
。
$_SERVER['HTTPS'] = (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && strtolower($_SERVER['HTTP_X_FORWARDED_PROTO']) == 'https') || (isset($_SERVER['HTTP_CF_VISITOR']) && strpos($_SERVER['HTTP_CF_VISITOR'], 'https') !== false) ? 'on' : 'off';
define('WP_SITEURL', ($_SERVER['HTTPS'] == 'on' ? 'https://' : 'http://').$_SERVER['HTTP_HOST']);
define('WP_HOME', ($_SERVER['HTTPS'] == 'on' ? 'https://' : 'http://').$_SERVER['HTTP_HOST']);
重要事情说三遍:需放在 require_once(ABSPATH . 'wp-settings.php'); 之前。