首页 » Tutorials » WordPress搬家:文件迁移、数据库备份与更新、重写.htaccess、兼容旧地址

WordPress搬家:文件迁移、数据库备份与更新、重写.htaccess、兼容旧地址

作者: lesca 分类: Tutorials, wordpress 发布时间: 2012-04-29 07:30 ė浏览 7,665 次 6没有评论

最近本站wordpress成功实现了搬家迁移工作,虽然说是搬家,但是服务器、域名和数据库都没有变,唯一移动的是wordpress目录:从lesca.me/blog上升至lesca.me
仅仅是小小的一步,却涉及到wordpress搬家的方方面面!相信你读完本文后,会对迁移更得心应手!

一、备份与迁移

任何重大变化开始前,都必须进行适当的备份工作。首先我备份blog文件夹:

tar -czf blog.tar.gz blog

至于数据库,直接进入phpMyAdmin导出SQL文件即可,因为我们之后需要对数据库进行诸多改变,而且你写的文章都在这里面了,所以这步非常重要!不过我们之后并没有用到备份出来的数据库。(因为一切都很完美啊。)
之后终于可以放心把博客从lesca.me/blog移动到lesca.me了。迁移完毕后博客是打不开的,需要修改数据库以及.htaccess文件。

二、恢复博客

1.修改.htaccess

由于是目录发生了变更,我们也需要将原来的.htaccess做相应更改:

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

2.更新数据库

数据库中除了有你的文章外,还包含了你博客大量的配置,我们主要做以下查询:

update `wp_posts` set `guid` = replace (`guid`, 'http://lesca.me/blog','http://lesca.me');
update `wp_posts` set `pinged` = replace (`pinged`, 'http://lesca.me/blog','http://lesca.me');
update `wp_posts` set `post_content` = replace (`post_content`, 'http://lesca.me/blog','http://lesca.me');
update `wp_options` set `option_value` = replace (`option_value`, 'http://lesca.me/blog','http://lesca.me');

到此,博客就恢复了!

三、兼容旧地址

出于SEO优化的目的,我更改了永久链接(permalinks)的形式,从原来的lesca.me/blog/yyyy/mm/dd/post-name变更为lesca.me/archives/post-name。为了使新博客地址与旧地址能够兼容,我们需要让访问者在点击旧链接时自动转向新地址。这种技术是通过.htaccess实现的,当然如果你不怕麻烦,也可以修改index.php,增加一个header头实现重定向。不过这不在我们讨论的范围内。言归正传。下面是我是用的重定向指令:

# BEGIN WordPress

RewriteEngine On
RewriteBase /

RewriteRule ^blog/[0-9]+/[0-9]+/[0-9]+/(.+)/$ /archives/$1\.html [R=301,NC,L]
RewriteRule ^blog/[0-9]+/[0-9]+/[0-9]+/(.+)$ /archives/$1\.html [R=301,NC,L]
RewriteRule ^blog/([0-9]+)/([0-9]+)/$ /archives/$1/$2 [R=301,NC,L]
RewriteRule ^blog/([0-9]+)/([0-9]+)$ /archives/$1/$2 [R=301,NC,L]
RewriteRule ^blog(.*)$ /index.php$1 [R=301,NC,L]

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

# END WordPress

R=301表示是用301-Moved Permanently;NC表示不区分大小写,L表示处理完本规则后忽略下面的规则。难点不是前面的正则表达式,而是后面的三个参数,我一开始没写R=301,这样无论如何都不会成功的。

References:

[1] WordPress搬家步骤
[2] more .htaccess tips and tricks..
[3] 5 useful url rewriting examples using .htaccess

本文出自 Lesca技术宅,转载时请注明出处及相应链接。

本文永久链接: http://lesca.me/archives/migrate-wordpress-and-keep-old-url.html

Leave a Reply

Your email address will not be published. Required fields are marked *

Ɣ回顶部