博客搬家到了 Linode 的东京结点上,操作系统依然使用的是配置服务器最顺手的 ArchLinux 但服务器构架从之前小内存机器上仔细调教过的 MySQL + Apache httpd
变成了复杂一些但可以充分压榨服务器性能的 MySQL + Apache httpd -> varnish -> nginx
也即通常所说的 LNMPA 再加一个 varnish 这样。数据库和文件等的迁移都很顺利,因为是先修改我的本地dns缓存指向新主机,调试好过后才真正修改的dns记录,所以实现了博客不下线地转移。
迁移完成立刻就发现了一个问题:首页无限重定向。
这个倒是不难办,把原来所用的 nginx 虚拟主机配置文件中一些针对不同文件类型做的配置全部去掉,只保留了反向代理给 varnish 的语句,首页正常打开,后台也正常。经测试插件配置、启停、增删都没有问题。
很快就发现,博客的重定向不正确,也就是 WordPress 后台中的固定链接设置无法生效,访问自定义链接的页面打开的是首页。
安装了 Permalink Fix & Disable Canonical Redirects Pack 插件,但是还是无法正常。(需要注意下面的语句是建立在此插件启用的基础上的,停用插件后还是会出错)
经过一番搜索和实验,其实就是一句话的事情。向博客配置的 location / {}
段加入:
1 2 3 |
if (!-e $request_filename) { rewrite ^/(.*)$ /index.php?q=$1 last; } |
这样就解决了基本的固定链接功能支持。但是因为我博客设置特殊,需要将 /45 和 /ngc45 这样的链接都自动转向 /NGC45 形式,以前用 LAMP 时在 .htaccess
中写入下面的语句即可:
1 2 |
RewriteRule ^([1-9]*[0-9][0-9]*)$ NGC$1 [R=301,L] RewriteRule ^ngc([1-9]*[0-9][0-9]*)$ NGC$1 [R=301,L] |
但是 nginx 是不支持 .htaccess 的,重定向规则要写在配置文件里面才行,查阅 wiki 加上实验的结果是这样:
1 2 3 4 5 |
if (!-e $request_filename) { rewrite "/([1-9]*[0-9][0-9]*)" /NGC$1 permanent; rewrite "/ngc([1-9]*[0-9][0-9]*)" /NGC$1 permanent; rewrite ^/(.*)$ /index.php?q=$1 last; } |
把自定义的两条 rewrite 规则放在前面是因为逐条执行时要先跳转 url 后作为固定链接传递给 WordPress 程序,否则就会404错误,而用引号来包含正则表达式则是按照官方wiki的说明进行的。
此设置在我的博客上实际可用。
发来贺电
撒花!*★,°*:.☆\( ̄▽ ̄)/$:*.°★* 。