北极寒流 » 网络资源 » 一个wordpress绑定多个域名(共用数据库)的方法 - 2015.12.09

一个wordpress绑定多个域名(共用数据库)的方法

WordPress的链接使用的是绝对URL,这样做的好处是避免了因为路径处理错误而出现死链接。但是路径信息是直接写在数据库里面的,从开发环境迁移到正式环境或者更换域名的时候需要修改数据库里面的域名信息才可以。一个WordPress站点绑定多个域名的时候也会遇到问题,即便如此,我们还是可以通过一些方法来绑定多个域名的。

绑定多个域名的前提

在WordPress中,同一个设置,常量的优先级高于在数据库里面定义的变量。WordPress为我们提供了“WP_HOME“和“WP_SITEURL“这两个常量。

而获取这两个选项的方法分别是:

$home = get_home_url();
$siteurl = get_site_url();

WordPress绑定多个域名的方法

根据WordPress的优先级,我们可以通过下面的代码覆盖数据库里面的这两个设置。

$home = 'http://'.$_SERVER['HTTP_HOST']; #获取当前访问的域名
$siteurl = 'http://'.$_SERVER['HTTP_HOST'];
define('WP_HOME', $home);
define('WP_SITEURL', $siteurl);

或者直接定义
define('WP_HOME','http://blog.epinv.com');
define('WP_SITEURL','http://blog.epinv.com');

以上代码可以写到WordPress的wp-config文件(找到wp-config的require_once(ABSPATH . ‘wp-settings.php’);在它的前面添加上面代码:)或当前主题的function.php中。

PHP中的$_SERVER['HTTP_HOST'] 用于获得来路域名。这样,就能根据来路为 WP_HOME 和 WP_SITEURL 变量赋值,实现 WordPress 多域名绑定。

设置以后,在后台控制面板里面的“设置”->“常规”里面的“WordPress 地址(URL)”和“站点地址(URL)”选项就变为灰色,不可编辑。

为防止域名改变而造成图片、附件等不可用,必须在控制面板的“设置 ”-> “媒体”里将“文件的完整 URL 地址”设为 “wp-content/uploads”(与“默认上传路径”参数相同)。

获取首页URL和站点URL

需要注意的是,一旦设置了这两个值,我们就需要通过获取常量值来获取首页URL和站点URL了,通过上面的方法获取的数据库里面的地址有可能是不正确的。

$home = WP_HOME;
$siteurl = WP_SITEURL;

在绑定多个域名和或经常需要修改域名的时候,这种方法是非常好用的,如果网站只有一个域名或者偶尔更换一下域名,还是直接修改数据库里面的地址比较好一点。

上述方法实现的是数据库内容共用,如果只是想用同一个数据库,但是数据内容分离出来,则可以采用下面的方法。

例如有自己的2个站,一个就是cbmland.com,另外一个是iFlex.com.cn,现在都是基于Wordpress系统的,那么在wp-config.php里面加上下面这样一段:

if($_SERVER["HTTP_HOST"]=="www.cbmland.com" || $_SERVER["HTTP_HOST"]=="cbmland.com"){

define('DB_NAME', 'cbmland');

define('DB_USER', 'cbmland');

define('DB_PASSWORD', 'http://cbmland.com');

define('DB_HOST', 'localhost');

define('DB_CHARSET', 'utf8');

define('DB_COLLATE', '');

$table_prefix = 'cbm_';

define ('WPLANG', 'zh_CN');

}else if($_SERVER["HTTP_HOST"]=="www.iflex.com.cn" || $_SERVER["HTTP_HOST"]=="iflex.com.cn"){

define('DB_NAME', 'cbmland');

define('DB_USER', 'cbmland');

define('DB_PASSWORD', 'http://iFlex.com.cn');

define('DB_HOST', 'localhost');

define('DB_CHARSET', 'utf8');

define('DB_COLLATE', '');

$table_prefix = 'ifx_';

//    define ('WPLANG', 'zh_CN');

}

很明显,这个配置文件会根据不同的$_SERVER["HTTP_HOST"]来给出不同的数据库表的配置,一个数据表的前缀是 cbm_ 而另外一个是ifx,就算在同一个数据库里面也不会冲突。各自有了独立的数据库配置,在同一个优化好的Wordpress系统下能互不干扰的运行起来。再加上不同的主题风格、和插件,各自选择性的使用。

怎么样?这样就可以基于一份Wordpress系统拷贝,理论上可以无限的运行多个不同风格的Wordpress实例了。

资料来源http://cbmland.com/post/544/oop-use-wordpress-as-class.html

发表评论 【登录·注册】

所有留言都会被审核,请勿发布垃圾评论!

(必填)*