blog搬家

蓄谋已久的blog搬家行动胜利完成!
请大家使用新域名[http://nonleaf.net],原来域名目前仍旧可以访问,会自动转向新域名。

本以为很轻松的搬家工作,还是遇到了不少困难,大概清楚了从域名解析到Apache mod_rewrite。

问题记录如下,以飨后人:

1.将备份的数据库用文本编辑器打开,将原来的URL批量替换为新的,然后导入新数据库。随后发现wordpress的侧边拦没法载入,报错总是在wp-includes/widgets.php里面的一些语句。Google未果,研究发现问题出在数据库上,有些表(如wp_options)的文本数据有类似这样的格式:s:6:"string",6表明后面的string的长度,我没仔细看代码,估计这么做是为了快速定位,但是如果string里面含有URL,都被我批量替换掉了,替换前后长度必然不相等,所以造成wp读出奇怪的数据down掉。

解决办法:
自己写个程序改一下备份的数据库文件,将s后面的数字数出来替换。或者对原来数据库只改关键地方--wp_options表里option_name='siteurl'的那一行,其余的通过在旧服务器上写.htaccess重定向解决,前提是原来服务器apache有mod_rewrite。
编辑旧服务器的wordpress目录下的.htaccess文件——
Options +FollowSymLinks
RewriteEngine on
RewriteRule ^(.*)$ http://nonleaf.net/wordpress/$1 [L,R=301]

2.cPanel暂时不支持域名绑定在深层目录下,但是这个对于一个虚拟主机多个人共享是需要的。可以通过mod_rewrite达到目的(写.htaccess)。

解决办法:
例如要从test.nonleaf.net对应到到主机的根目录(/home/user/public_html/)下的一个深层目录/home/user/public_html/nonleaf/test/。
首先在域名商那里将test添加如A记录,IP指向主机(当然你也可以添加CNAME),同时将这个域名加入到cPanel的域名中,让主机能接受来自这个域名的请求。然后在public_html下面创建.htaccess文件——
Options +FollowSymLinks
RewriteEngine on
RewriteCond %{REQUEST_URI} !^/nonleaf/test/.*$ [NC] #防止反复rewrite造成死循环
RewriteCond %{HTTP_HOST} ^test.nonleaf.net$ [NC] #识别出test.nonleaf.net域名
RewriteRule ^(.*)$ nonleaf/test/$1 [L,NC] #rewrite到子目录

当然,如果在test目录下的.htaccess中还有rewrite,需要考虑加上RewriteBase。总之mod_rewrite的功能很好很强大,可是实现机制有些复杂,要多看manual才行。

随机文章:

Add a Comment