[MT Hack]让MT 系统发布的文章告别长绝对路径

This is a SiteLog for Easun's Blog.
MT 很优秀的静态页面发布,但是在每个页面中每个路径都是带域名的长路径,比如http://easun.org/blog/archives/mt_hackmt_331_1.html之类。

这样的路径虽然完整而且保证了路径跨域名的实效性。但是实在太长了。虽然现在每个人几乎都是宽带上网,但是能节省点流量也是好事,而且对于流量很大的服务器,积少成多,也是对流量的很好的节约。另外,也适合自己迁移主机什么的:0

彻底的相对路径判断起来太麻烦,最好的样式就是去掉域名的以“/”开头的短绝对路径。

说改就改,虽然据说 MT 有这样的插件,但是我并不希望对所有的绝对路径都去掉域名,还是自己改程序的方便,反正,这个MT系统我是不准备轻易升级的。

MT 的标签映射 Perl 模块是 lib/MT/Template/ContextHandlers。标准的 Perl OOP 模块,打开就看见了各种 MT 标签的映射函数。
在其后添加自写 Perl 函数。


sub _easun_remove_bloghost_url
{
my($ctx, $url) = @_;
my $blog = $ctx->stash('blog');
my ($blog_domain) = $blog->archive_url =~ m|(.+://[^/]+)|;
$url=~s|^$blog_domain/|/|is;
$url;

}

这个函数的作用就是把带域名的长绝对路径换成去掉域名的以“/”开头的短绝对路径。
有了这个函数,就可以根据自己的喜欢把任意标签代表的路径处理。
处理的格式是:
$link = $ctx->_easun_remove_bloghost_url($link);

我自己替换了函数 sub _hdlr_entry_link {} sub _hdlr_entry_permalink { } 中的url ,觉得足够了:)

最后,重建Blog,大功告成。效果参见本站blog.