2 min read

WordPress 迁移

前些日子我终于下定决心买 VPS,然后就把这个博客从虚拟主机上迁移过去。因为域名不变,只是换空间,所以大部分步骤是按 WordPress 提供的文档操作。不过过程中碰上不少问题,最终且算是解决了,所以做一总结。

备份旧服务器上的数据库

旧的虚拟主机上提供有 cPanel 界面,所以操作十分简单。

备份旧服务器上的文件

同样可以借助 cPanel。

导入旧数据库到新服务器

因为 VPS 上没有 cPanel,所以数据库的导入是通过命令行执行的。

首先通过 SSH 登录到服务器:

ssh zfanw

然后执行 MySQL 命令:

sam@zfanw.com: mysql -u mysqlusername -p databaseName < zfanw.com.bak.sql

导入的过程非常快,如果不确信是否成功,可以执行 MySQL 命令查看:

use zfanwcom;
show tables;

结果如下:

mysql> show tables;
+---------------------------+
| Tables_in_zfanwcom |
+---------------------------+
| wp_PopularPostsdata       |
| wp_commentmeta            |
| wp_comments               |
| wp_links                  |
| wp_options                |
| wp_postmeta               |
| wp_posts                  |
| wp_sucuri_lastlogins      |
| wp_term_relationships     |
| wp_term_taxonomy          |
| wp_terms                  |
| wp_usermeta               |
| wp_users                  |
+---------------------------+

复制旧文件到新服务器

数据库导入完成后,将虚拟主机上备份的文件上传到 VPS 并解压到相应目录。

解析域名

将域名重新解析到新的 IP 上。

错误情况

解析完成后访问新 IP 上的博客,就出现了各种情况。

先来看下 /etc/apache2/vhosts.d/ 目录下 zfanw.com.conf 这个虚拟主机文件的配置:

<VirtualHost *:80>
    ServerName zfanw.com
    ServerAlias www.zfanw.com
    ServerAdmin chenxsan@gmail.com

    DocumentRoot /srv/www/vhosts/zfanw.com

    <Directory "/srv/www/vhosts/zfanw.com">
        AllowOverride All
        Options FollowSymLinks

        Order allow,deny
        Allow from all

    </Directory>

</VirtualHost>

404 错误

我碰到的情况中,有一种错误是这样:

Object not found!

The requested URL was not found on this server. The link on the referring page seems to be wrong or outdated. Please inform the author of that page about the error.

If you think this is a server error, please contact the webmaster.

Error 404

www.zfanw.com

Apache/2.4.6 (Linux/SUSE)

网上的资料有说是 .htaccess 文件的问题,因为我自定义了 WordPress 的固定链接。但我的 .htaccess 文件内容如下:

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

这是 WordPress 默认的。另外,使用上一篇介绍的方法,可以看到我的服务器上已经安装了 mod_rewrite 模块。

我的情况下,问题出在 /etc/apache2/httpd.conf 文件,WordPress 说明如下

Your server may not have the AllowOverride directive enabled. If the AllowOverride directive is set to None in your Apache httpd.config file, then .htaccess files are completely ignored. In this case, the server will not even attempt to read .htaccess files in the filesystem. When this directive is set to All, then any directive which has the .htaccess Context is allowed in .htaccess files.

如果 Apache 的 httpd.conf (openSUSE 下安装的 Apache 里配置文件是叫这个) 中 AllowOverride 被设置为 None,则 .htaccess 文件完全被忽视,所以我需要修改 httpd.conf 文件内容,结果如下:

 <Directory />
    Options FollowSymLinks
    AllowOverride All
 </Directory>

重启 Apache 服务器:

sudo rcapache2 restart

再度访问博客,问题消失了。

不过这篇是事后整理,碰上的许多枝末问题已经遗忘,不一定完整。

报告问题 修订

如果你有自建 https 代理的需求,欢迎尝试 Phantom,一键搭建,方便快捷。查看 demo