Pages

Friday, 18 January 2013

WordPress博客搬家和更换域名的简单步骤

独立的Wordpress博客更换域名和搬家(更换网站空间)的方法及简明步骤记录如下,以最常见的网站服务器架构LAMP(Linux+Apache+MySQL+PHP)和Cpanel控制面板为例子,假设旧的域名为旧域名.com,新的域名为新域名.com:

1、新域名的绑定
先修改网站域名的DNS解析服务器使之指向空间服务商的域名服务器,然后登录空间的Cpanel控制面板,在Add-on Domains功能中把新域名绑定到新的网站空间(或者是原来的旧空间);
2、旧域名下网站的数据导出:
WordPress博客的网站可以分为网站文件的数据(包括各种插件和主题等等)和MySQL数据库的数据两个部分所以网站数据的备份也包括这两部分。
(1)在cpanel控制面板中通过文件管理器把旧的Wordpress博客的站点根目录下面的所有文件直接打包(利用Compress压缩功能) 成Zip或者gz的压缩包,然后把压缩包下载到本地计算机,如果文件很大的情况也可以通过Shell命令(用SSH、Cronjob或者通过PHP Shell都可以)直接用Wget拉取到新的网站服务器上。
(2)MySQL数据库的导出:在导出旧数据库之前,最好通过Cpanel控制面板中“MySQL选项”菜单中的CheckDB功能来检查一下数据 库有无错误,如果有错误可以直接RepairDB修复错误然后再导出(或者直接运行SQL命令CHECK和REPAIR也是一样的)。然后就可以通过 MySQL自带的MySQLDump命令或者使用Cpanel面板的PHPMyAdmin导出数据库,比较了一下这两种方式导出的SQL数据文件,是可以 兼容的,都可以通过新网站的PhpMyAdmin界面直接导入(最好使用gzip压缩格式,SQL文本格式数据的压缩比一般都超过7~8,可以减少很多上 传的数据量),差别在于使用MySQLDump命令导出的数据库文件的SQL命令相对比较完整一点。(在PhpMyadmin导出数据库的高级选项里面也 有选项可以调整)
还有一个问题就是发现一开始用phpMyAdmin导入数据库时会提示出现#1044错误:
MySQL 返回:
#1044 - Access denied for user 'XXXX'@' to database 'AAAA'

其实错误原因是因为旧数据库是直接在PhpMyAdmin的数据库管理主页界面导出的,包含了此用户可以访问的所有数据库,而不是仅仅将 Wordpress使用的MySQL数据库导出,所以导出的SQL数据文件开始会加入一条创建新数据库的语句,在导入到新网站以后,由于新旧MySQL数 据库管理系统的user用户名和password密码不同,所以会出现此错误。解决方法就是只需要单独导出Wordpress使用的数据库就可以了(就是 在Wp-config文件中定义连接的数据库名)。
3、本地更新MySQL数据库数据(主要是域名的替换):
网上有不少方法是在PhpMyAdmin管理界面通过运行SQL UPDATE语句来把数据库中的旧网站域名替换成新网站的域名,这个方法稍显繁琐,要根据不同的数据表结构运行不同的SQL语句,其实由于导出的SQL数 据库文件是明文保存的,比较简单方法的就是直接用支持Unicode编码的文本编辑器(比如NotePad++)在导出的SQL数据文件中直接执行替换功 能,把SQL数据文件中所有的形如http://(www.)旧域名.com的字符串替换为http://(www.)新域名.com即可。
4、数据导入新的网站空间(如果只是需要更换域名就无需此步骤):
先把修改过的SQL数据库文件通过PhpMyAdmin管理界面导入到新的网站空间。然后再通过FTP或者Cpanel的文件管理器把前面导出的 Wordpress的网站文件Zip压缩包上传到新的空间正确的目录下再解压就可以了。还有一个步骤就是要修改Wordpress目录下的wp- config文件,把其中连接MySQL的数据库名还有用户和密码都修改为新的网站的数据,另外如果有必要,还可以从新生成新的Wordpress博客用 于用户认证的唯一Salt和Key(通过Wordpress.org的在线服务https://api.wordpress.org/secret-key/1.1/salt/)。如果没有问题的话,这时访问新的域名就可以正常打开Wordpress博客的主页,而且管理后台的设置->常规中的“WordPress 地址(URL)”和“站点地址(URL)”两项设置也都应该自动替换成新的域名对应的URL了。
5、旧域名设置301重定向到新域名和检查一下有些插件能否正常工作。
在旧域名的网站根目录下修改.htaccess文件,加入以下一段代码,把对旧域名的访问301重定向到新的域名下,同时保留仍然可以登录旧域名的WP管理面板:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.旧域名\.com$ [NC]
RewriteCond %{REQUEST_URI} !^/wp-admin
RewriteCond %{REQUEST_URI} !^/wp-login.php
RewriteRule ^(.*)$ http://www.新域名.com/$1 [R=301,L]
同时还需要将原博客的.htaccess文件中以下一段Wordpress加入的代码删除(只有开启了固定链接功能才有的):
# BEGIN WordPress

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

# END WordPress
另外因为有些插件的设置不一定是在数据库中的(可能保存在配置文件中),所以更换域名以后还是都应该检查一下插件是否都能正常工作,如果需要的话还要手动修改一下才可以。至此Wordpress博客的域名迁移就完成了.