saber 酱的抱枕

Fly me to the moon

06/29
2017
软件

网站搬家记录

现在的网站:

 Apache iis web.config wordpress 伪静态 教程 经验 网站搬家

(话说IIS 8.5 比起IIS 6真是方便了太多)

以前我的网站用的是香港的一家虚拟主机,从一开始到现在,三年的时间都是在用那个空间。(主机商是51php,总体上满意,售后服务挺好。以后不用它了,就当做是帮它宣传一下吧)

其实我的网站只占用极少的磁盘空间和数据库空间,只有流量用的多。随着流量逐渐增长,我也不断升级主机套餐,最近又面临不得不升级的情况,我觉得不能再这样继续下去了,正好最近尝试了vultr的vps,所以打算把网站搬到vultr上面去。

本月的主机使用情况:

 Apache iis web.config wordpress 伪静态 教程 经验 网站搬家

其实现在套餐的流量是30GB/月,前几天就用完了,现在的45GB是我让客服临时加了点。虽然我最近做了些优化措施,但预计以后每月流量仍会达到20GB以上,现在这个套餐的流量未来也会不够用。

相比现在的虚拟主机,vultr的vps有诸多优势:
1.价格不贵,5美元/月,一年也就400RMB,和我现在这个虚拟主机套餐差不多是相同价位,但流量上限高得多;
2.vps可直接登陆操作系统,管理网站更为便捷,可以摆脱掉ftp了,对网站的控制也更加随心所以了;
3.避免一些奇葩的事情,比如之前我发现我的主机被禁止google抓取了,后来我找客服解除了限制。
3.vps作为一个操作系统,能做的事情比只能放网站的虚拟主机强多了,最简单的应用就是充当vpn上网。其他的比如架ss什么的我还没研究过。

我原来的虚拟主机的环境是Linux + Apache,但因为我不会linux,所以vultr上我安装的是windows + IIS。这个搬家的过程也踩了不少坑,也记录一下吧。


windows上的环境配置此处不表,可以参考一个教程:
《windows2012安装iis8.5+php(FastCGI)+MySQL环境搭建教程》

这个教程很详细,不过我要提醒一些要注意的事情:
1.教程里的代码涉及到php的路径时都少了反斜杠,如"C:phpextphp_opcache.dll",其实是"C:\php\ext\php_opcache.dll"。还有另一处也是这样,注意根据自己路径修改。
2.extension_dir有两处,下面的才是windows使用的。
3.教程没有开启php.ini里的extension=php_openssl.dll,建议开启。
4.里面安装了一个iis的rewrite模块,WordPress伪静态需要用到这个。

下面记录一下搬家的过程。


1.迁移数据库。

原本我以为数据库的备份和恢复很简单,结果栽了跟头。因为我现在的虚拟主机只能通过phpmyadmin管理数据库,不能直接拷贝数据库文件,所以我一开始是在phpmyadmin里导出为sql文件,然后在vultr的vps上恢复。结果尝试了两次不同的导出设置,都恢复失败(也可能是我姿势不够高)。后来用WordPress的插件“WordPress Database Backup”备份,恢复成功了。

 Apache iis web.config wordpress 伪静态 教程 经验 网站搬家

用WordPress Database Backup备份时勾选上右侧两个表(默认是没有勾选的),否则可能会因为网站需要这两个表而出现错误。我在这里也栽过一次跟头。

获得备份的数据库文件之后,在vps上的数据库里新建一个和原数据库同名的空数据库,然后再导入备份的数据库,能正常恢复就ok了。


2.恢复网站文件

网站文件的备份和恢复很简单,没出现什么问题。

恢复之后,修改wp-config.php里的数据库信息。之后修改域名解析、在iis里建站。


3.其他工作

对我的这个网站来说,后续工作主要是设置伪静态。Apache使用的是.htaccess文件,但IIS里使用的是web.config。

操作上很简单,删掉原来的.htaccess,之后给网站目录赋予USER用户组的修改权限,最后去WordPress后台里,找到固定链接设置,点击保存按钮,WordPress就会自动在网站根目录生成web.config文件。

 Apache iis web.config wordpress 伪静态 教程 经验 网站搬家

WordPress生成生成web.config后的提示。

这样重写规则就设置好了,但是之后发生了另一个问题,就是如果url里有中文字符,就会404。实际上从浏览器的地址栏来看,看不出问题,显示的文字也没有乱码,但网页却是404。

这是在linux上不会发生但会在windows上会发生的问题,因为windows上的php默认是GBK编码,所以WordPress在转换中文字符的时候转换成了GBK编码,导致错误。正确的做法应该是转换为UTF-8,我们可以去修改\wp-includes\class-wp.php 这个文件里转换编码的代码。教程如下:
《wordpress伪静态URL支持中文的修改方法》

修改代码后就ok了。

这个问题是除了数据库问题之外困扰我时间最长的问题。因为我的网站绝大部分文章的url都有中文,所以在我看来,是所有文章页都打不开,这让我怀疑是伪静态规则出了问题,于是去研究 .htaccess 和 web.config 的规则,浪费了大量时间。其实用WordPress自动生成的 web.config 就可以,问题出在编码转换上。后来我无意间看到这个编码问题的说法,才走上了正途。

最后我还禁止了WordPress的自动升级。因为使用WordPress时间长了,难免会修改WordPress自身的功能文件,但WordPress升级会会覆写这些文件,导致规则失效。以前我就出现过这类问题,这次搬家后也修改了一些文件,所以还是决定禁止自动升级,免得出现意料之外的问题。

《WordPress关闭自动更新升级功能的方法》

网站搬家记录