Nginx 重定向

过去因为一直弄不好我的 blog 里的 Google Analytics 插件的设定,导致在 WordPress 后台的 Dashboard 里面无法显示 Google Analytics 的报告,因此我过去几个月都没有怎么去看 Google 的统计工具。昨天把这事搞定了,于是我也看了一下网站统计方面的信息。当我看到 Google Webmaster Tools 里报告的 189 项 Not found 抓取错误时,觉得应该处理一下子了。

之所以搞得这么难看,是因为我过去切换 blog 系统的 URL 设定的缘故。最早我用的是 WordPress,当时用的是 /year/month/slug/ 的 URL 格式,后来我学会了 Movable Type,于是就把 URL 的格式弄成了 Movable Type 默认的 /year/month/slug.html 格式。当时为了把搜索引擎索引的旧的 URL 都改过来还花了好多功夫。后来我实在是不想再用 Movable Type 了,就把 blog 程序换回了更有前途的 WordPress,URL 格式我也切换回来了,毕竟这是 WordPress 里比较常用的。Movable Type 是生成的静态页面,因此用 html 格式比较自然,WordPress 是动态页面,自然就比较倾向于子目录的格式。

切换了 URL 格式,过去的页面就自然无法访问了。我在第一次切换成 Movable Type 的时候,就为此费了心思。当时用的是虚拟主机,web 服务器自然是 Apache,我就捣鼓了一阵 .htaccess,让旧的 URL 可以自动重定向到新的下面。这次也是如此,不过是反过来了。而且这次我用的是 VPS 主机,资源不容许跑 Apahce,所以我用的 web 服务器是 Nginx。Nginx 不支持 .htaccess,因此我要修改 Nginx 的设定。通过搜索,相关代码如下:

rewrite ^/(.*).html$ http://liuf.net$1 permanent;

话说 Nginx 虽然在 VPS 领域比较有知名度了,但好像还是比不过 Apache。像 WordPress 之类的程序,官方支持文档里首选的还是 Apache。像 WordPress 的一些插件,更是如此了。比如 WP Super Cache 插件,我到现在进入它的后台上来还是给我一篇警告,比如说 Mod Rewrite 模块没安装啊、Mod Rewrite 规则无法更新之类的啊,实在是烦死了。虽然我根据网上一些前辈的代码,修改了 Nginx 里相关的设置文件,但我仍然不确定这个插件是否正确运行了。本来我觉得应改没什么问题,不过最近我发现我通过这个插件 Preload 的缓存,在 Preload 完毕之后就被删除了,让我非常不解。更可气的是,这次我为了弄 URL 重定向的问题,仔细的看了一下 Nginx 的相关设定代码,发现我从别人那里弄来的 WP Super Cache 的设定代码里根本就有问题,也许是版本之间有差异,在重定向的 URL 里面竟然多了几道下划线,这不让之前的设定都失效了么……我改了相关的设定,观察一下有没有效果再说。

另外,在修改重定向设定时,我还从 Nginx 官方网站上看到了这么一个页面,关于统一网址时的错误做法以及正确的做法,虽然不是很明白为什么这样就效率低,不过我还是照着改了过来。

总之,Nginx 的设定给我的感觉是比较灵活,像编程语言那样的设定脚本,不是严格的语法,灵活性相当的高;不过不足的是比较冗长,繁琐,不如 Apache 的 .htaccess 文件的设定那么简单明确。我当然希望它能有所改进,毕竟 Nginx 占用资源小这一点对于 VPS 用户来说是相当大的优势。如果有相关模块,能做到把 .htaccess 文件动态转换成 Nginx 的设定就好了,就像 Lighttpd 的 magnet 模块一样,可以使用 Lua 语言来代替 Lighttpd 自己的设定。既然 Lua 语言可以转换成 Lighttpd 的设定,那么我像把 .htaccess 的规则转换成 Nginx 的设定应该也问题不大吧。

发表评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据